FSO操作大全2007-03-19 16:50如何删除一个文件
[JScript]
function DeleteFile(filespec)
{
var fso;
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.DeleteFile(filespec);
}
[VBScript]
Sub DeleteAFile(filespec)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile(filespec)
End Sub
FileExists 方法
请参阅
DriveExists 方法 | FolderExists 方法 | GetFile 方法 | GetFileName 方法
应用于:FileSystemObject 对象
语言
JScript
VBScript
显示所有语言
如果指定文件存在返回 True ;否则返回 False。
object.FileExists(filespec)
参数
object
必选项。应为 FileSystemObject 的名称。
filespec
必选项。需要判定是否存在的文件的名称. 如果文件可能不在当前文件夹中,那么必须提供完整的路径说明(可以是绝对的或相对的)。
下面的例子说明了 FileExists 方法的用法。
[JScript]
function ReportFileStatus(filespec)
{
var fso, s = filespec;
fso = new ActiveXObject("Scripting.FileSystemObject");
if (fso.FileExists(filespec))
s += " exists.";
else
s += " doesn't exist.";
return(s);
}
[VBScript]
Function ReportFileStatus(filespec)
Dim fso, msg
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(filespec)) Then
msg = filespec & " exists."
Else
msg = filespec & " doesn't exist."
End If
ReportFileStatus = msg
End Function
请参阅
DriveExists 方法 | FolderExists 方法 | GetFile 方法 | GetFileName 方法
应用于:FileSystemObject 对象
脚本运行时库
处理文件
语言
JScript
VBScript
显示所有语言
有两种主要的文件处理类型:
创建、添加或删除数据,以及读取文件
移动、复制和删除文件
创建文件
创建空文本文件(有时被叫做“文本流”)有三种方法。
第一种方法是用 CreateTextFile 方法。下面的示例示范了如何用 CreateTextFile 方法创建文本文件:
[VBScript]
Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
[JScript]
var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
创建文本文件的第二种方法是,使用 FileSystemObject 对象的 OpenTextFile 方法,并设置 ForWriting 标志。
[VBScript]
Dim fso, ts
Const ForWriting = 2
Set fso = CreateObject("Scripting. FileSystemObject")
Set ts = fso.OpenTextFile("c:\test.txt", ForWriting, True)
[JScript]
var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true);
创建文本文件的第三种方法是,使用 OpenAsTextStream 方法,并设置 ForWriting 标志。要使用这种方法,使用下面的代码:
[VBScript]
Dim fso, f1, ts
Const ForWriting = 2
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("c:\test1.txt")
Set f1 = fso.GetFile("c:\test1.txt")
Set ts = f1.OpenAsTextStream(ForWriting, True)
[JScript]
var fso, f1, ts;
var ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile ("c:\\test1.txt");
f1 = fso.GetFile("c:\\test1.txt");
ts = f1.OpenAsTextStream(ForWriting, true);
添加数据到文件中
一旦创建了文本文件,使用下面的三个步骤向文件添加数据:
打开文本文件。
写入数据。
关闭文件。
要打开现有的文件,则使用 FileSystemObject 对象的 OpenTextFile 方法或 File 对象的 OpenAsTextStream 方法。
要写数据到打开的文本文件,则根据下表所述任务使用 TextStream 对象的 Write、WriteLine 或 WriteBlankLines 方法。
任务 方法
向打开的文本文件写数据,不用后续一个新行字符。 Write
向打开的文本文件写数据,后续一个新行字符。 WriteLine
向打开的文本文件写一个或多个空白行。 WriteBlankLines
要关闭一个打开的文件,则使用 TextStream 对象的 Close 方法。
注意 新行字符包含一个或几个字符(取决于操作系统),以把光标移动到下一行的开始位置(回车/换行)。注意某些字符串末尾可能已经有这个非打印字符了。
下面的例子示范了如何打开文件,和同时使用三种写方法来向文件添加数据,然后关闭文件:
[VBScript]
Sub CreateFile()
Dim fso, tf
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile("c:\testfile.txt", True)
' 写一行,并带有一个新行字符。
tf.WriteLine("Testing 1, 2, 3.")
' 向文件写三个新行字符。
tf.WriteBlankLines(3)
' 写一行。
tf.Write ("This is a test.")
tf.Close
End Sub
[JScript]
function CreateFile()
{
var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject");
tf = fso.CreateTextFile("c:\\testfile.txt", true);
// 写一行,并带有一个新行字符。
tf.WriteLine("Testing 1, 2, 3.") ;
// 向文件写三个新行字符。
tf.WriteBlankLines(3) ;
// 写一行。
tf.Write ("This is a test.");
tf.Close();
}
读取文件
要从文本文件读取数据,则使用 TextStream 对象的 Read、ReadLine 或 ReadAll 方法。下表描述了不同的任务应使用哪种方法。
任务 方法
从文件读取指定数量的字符。 Read
读取一整行(一直到但不包括新行字符)。 ReadLine
读取文本文件的整个内容。 ReadAll
如果使用 Read 或 ReadLine 方法,并且想跳过数据的特殊部分,则使用 Skip 或 SkipLine 方法。read 方法的结果文本存在一个字符串中,该字符串可以显示在一个控件中,也可以用字符串函数(如 Left、Right 和 Mid)来分析,连接等等。
下面的例子示范了如何打开文件,和如何写数据到文件中并从文件读取数据:
[VBScript]
Sub ReadFiles
Dim fso, f1, ts, s
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
' 写入一行。
Response.Write "Writing file <br>"
f1.WriteLine "Hello World"
f1.WriteBlankLines(1)
f1.Close
' 读取文件内容。
Response.Write "Reading file <br>"
Set ts = fso.OpenTextFile("c:\testfile.txt", ForReading)
s = ts.ReadLine
Response.Write "File contents = '" & s & "'"
ts.Close
End Sub
[JScript]
function ReadFiles()
{
var fso, f1, ts, s;
var ForReading = 1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
// 写入一行。
Response.Write("Writing file <br>");
f1.WriteLine("Hello World");
f1.WriteBlankLines(1);
f1.Close();
// 读取文件内容。
Response.Write("Reading file <br>");
ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
s = ts.ReadLine();
Response.Write("File contents = '" + s + "'");
ts.Close();
}
移动、复制和删除文件
FSO 对象模型各有两种方法移动、复制和删除文件,如下表所述。
任务 方法
移动文件 File.Move 或 FileSystemObject.MoveFile
复制文件 File.Copy 或 FileSystemObject.CopyFile
删除文件 File.Delete 或 FileSystemObject.DeleteFile
下面示例在驱动器 C 的根目录中创建一个文本文件,向其中写一些信息,然后把它移动到 \tmp 目录中,并在 \temp 中做一个备份,最后把它们从两个目录中删掉。
要运行下面的示例,需要先在驱动器 C 的根目录中创建 \tmp 和 \temp 目录:
[VBScript]
Sub ManipFiles
Dim fso, f1, f2, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
Response.Write "Writing file <br>"
' 写入一行。
f1.Write ("This is a test.")
' 关闭写入到的文件。
f1.Close
Response.Write "Moving file to c:\tmp <br>"
' 获取到 C:\ 根目录中文件的句柄。
Set f2 = fso.GetFile("c:\testfile.txt")
' 将文件移到 \tmp 目录。
f2.Move ("c:\tmp\testfile.txt")
Response.Write "Copying file to c:\temp <br>"
' 将文件复制到 \temp。
f2.Copy ("c:\temp\testfile.txt")
Response.Write "Deleting files <br>"
' 获得文件当前位置的句柄。
Set f2 = fso.GetFile("c:\tmp\testfile.txt")
Set f3 = fso.GetFile("c:\temp\testfile.txt")
' 删除文件。
f2.Delete
f3.Delete
Response.Write "All done!"
End Sub
[JScript]
function ManipFiles()
{
var fso, f1, f2, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
Response.Write("Writing file <br>");
// 写入一行。
f1.Write("This is a test.");
// 关闭写入到的文件。
f1.Close();
Response.Write("Moving file to c:\\tmp <br>");
// 获取到 C:\ 根目录中文件的句柄。
f2 = fso.GetFile("c:\\testfile.txt");
// 将文件移到 \tmp 目录。
f2.Move ("c:\\tmp\\testfile.txt");
Response.Write("Copying file to c:\\temp <br>");
// 将文件复制到 \temp。
f2.Copy ("c:\\temp\\testfile.txt");
Response.Write("Deleting files <br>");
// 获得文件当前位置的句柄。
f2 = fso.GetFile("c:\\tmp\\testfile.txt");
f3 = fso.GetFile("c:\\temp\\testfile.txt");
// 删除文件。
f2.Delete();
f3.Delete();
Response.Write("All done!");
}
‘创建一个FileSystemObject的事例
Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)
‘创建一个要进行操作的文件
IF MyFileObject.FileExists(“c:\test.txt”)
Response.write(“存在这个文件”)
Else
Response.write(“不存在这个文件”)
END IF
Set MyFile=MyFileObject.CreateTextFile(“c:\test.txt”)
MyFile.WriteLine(“Hello”)
MyFile.Close
‘复制文件操作
MyFileObject.CopyFile “c:\test.txt” “c:\test2.txt”
‘移动文件操作
MyFileObject.MoveFile “c:\test.txt” “c:\test3.txt”
‘删除这些文件
MyFileObject.DeleteFile “c:\test.txt”
MyFileObject.DeleteFile “c:\test3.txt”
%>
如何用FSO创建一个目录
Function CreateDIR(ByVal LocalPath) '建立目录的程序,如果有多级目录,则一级一级的创建
On Error Resume Next
LocalPath = Replace(LocalPath, "\", "/")
Set FileObject = CreateObject("Scripting.FileSystemObject")
patharr = Split(LocalPath, "/")
path_level = UBound(patharr)
For I = 0 To path_level
If I = 0 Then pathtmp = patharr(0) & "/" Else pathtmp = pathtmp & patharr(I) & "/"
cpath = Left(pathtmp, Len(pathtmp) - 1)
If Not FileObject.FolderExists(cpath) Then FileObject.CreateFolder cpath
Next
Set FileObject = Nothing
If Err.Number <> 0 Then
CreateDIR = False
Err.Clear
Else
CreateDIR = True
End If
End Function
<%
'-------打开文本文档,并写进内容的例子---------------------------
set fso=createobject("scripting.filesystemobject")
const iomode=8
const create=false
set open_text = fso.OpenTextFile(server.mappath("new_text.txt"),iomode,create)
open_text.writeline("电话:Tel01")
set open_text=nothing
set fso=nothing
%>
<!--
语法参考:
object.OpenTextFile(filename[, iomode[, create[, format]]])
参数
object
必选项。object 应为 FileSystemObject 的名称。
filename
必选项。指明要打开文件的字符串表达式。
iomode
可选项。可以是三个常数之一:ForReading 、 ForWriting 或 ForAppending 。
create
可选项。Boolean 值,指明当指定的 filename 不存在时是否创建新文件。如果创建新文件则值为 True ,如果不创建则为 False 。如果忽略,则不创建新文件。
format
可选项。使用三态值中的一个来指明打开文件的格式。如果忽略,那么文件将以 ASCII 格式打开。
iomode设置
1 只读
2 重写
8 添写
create设置
true 如果要打开的文件不存在,则创建新文件
false 如果要打开的文件不存在,则不创建文件,并出现错误提示:文件未找到
错误提示分析:
输入超出了文件尾
原理:每调用一次readline,readline指针会下滑一行,当下滑超过文本尾时则出现该错误。
具体原因:多次调用 readline方法,
错误的文件模式
原理:打开的文件是否支持读写并不仅决定于文件夹的权限设置,同opentextfile中的iomode的设置也有关,当操作同iomode的设置出现冲突时则会出现该错误
具体原因:iomode=1 却执行了 write 或 writeline方法 或 iomoe=2 却执行了 readline方法
文件未找到
原理:要打开的文件不存在
具体原因:create设置为:false 而要打开的文件并不存在
-->
三种禁用FSO组件的方法
众所周知,FileSystemObject组件的强大功能及破坏性是它屡屡被免费主页提供商(那些支持ASP)的禁用的原因。
第一种:用RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll(win98路径)来注销该组件。
windows98系统
在DOS命令行状态输入以下命令:
关闭命令:RegSvr32 /u C:\WINDOWS\SYSTEM\scrrun.dll
打开命令:RegSvr32 C:\WINDOWS\SYSTEM\scrrun.dll
win2000系统:
在CMD命令行状态输入以下命令:
关闭命令:RegSvr32 /u C:\WINNT\SYSTEM32\scrrun.dll
打开命令:RegSvr32 C:\WINNT\SYSTEM32\scrrun.dll
第二种:修改Progid的值,在ASP里调用组件的方式通常是 Set 对象名=Server.CreateObject("Progid"),这时候我们就可以通过修改注册表中的Progid值从达到禁用该组件的方法。在 开始-运行中敲入regedit,然后找到HKEY_CLASSES_ROOT\Scripting.FileSystemObject,这时候我们就可以更改该rogid的值了,如改成Scripting.FileSystemObject8。这样在ASP页里就这样调用了:
<%@ Language=Vbscript%>
<%
Set Fs=Server.CreateObject("Scripting.FileSystemObject8")
%>
(如果你前面没有调用过该组件的话,则无须重启,就可以看到效果了,否则请重启后看效果。)
这时候我们看看还是用原来的调用方法的结果:
<%@ Language=Vbscript%>
<%
Set Fs=Server.CreateObject("Scripting.FileSystemObject")
%>
这时候的运行结果为:
服务器对象 错误 ''''ASP 0177 : 800401f3''''
Server.CreateObject 失败
/aspimage/testfile2.asp, 行3
800401f3
OK,达到我们的要求。
第三种:能通过修改Progid值来禁用该组件,那也可以通过修改Clsid来实现。
我们知道,除了CreateObject方法以外,也可以使用一般的<object>标注建立一个组件,我们可以在ASP里面使用HTML的<object>标注,以便在网页中加入一个组件。方法是:<object runat=server id=fs1 scope=page progid="Scripting.FileSystemObj
ect"></object>Runat表示是在服务端执行,Scope表示组件的生命周期,可以选用Session,Application或page(表示当前页面,也可缺省)这种写法对我们没用,还有一种写法是:
<object runat=server id=fs1 scope=page classid="clsid:clsid的值"></obj
ect>
我们也可以通过修改该Clsid的值而禁用该组件,如将注册表中HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID的值0D43FE01-F093-11CF-8940-00A0C9054228改成0D43FE01-F093-11CF-8940-00A0C9054229(改了最后面一位),这时候的写法为:
<object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11
CF-8940-00A0C9054229"></object>
看运行结果,没问题,OK。这时候我们再用<object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"></object>这时候就出错了。
新建一用户:iusr_domain
IIS里设置对应站点的匿名用户IUSR_DOMAIN
CACLS: 设置目录权限
其中,xxx.exe是你自己要执行的可执行文件。
<script language="JavaScript">
var Shell=new ActiveXObject("WScript.Shell");
try { var kk="xxx.exe";
var aa=Shell.Run(kk,1,true);
}
catch(e) { alert("该可执行文件不存在");}
</script>
set fso=server.CreateObject("scripting.filesystemobject")
if fso.folderexists(server.MapPath("demo"))=false then
fso.createfolder(server.MapPath("demo"))
end if
if fso.fileexists(server.MapPath("demo/demo.txt"))=false then
fso.createtextfile(server.MapPath("demo/demo.txt"))
end if
set txt=fso.opentextfile(server.MapPath("demo/demo.txt"),8,true)
txt.write("aaddfsdfs")
对text文件读写,需要建立textstream对象
我们在建立了TextStream对象之后,接下来我们可以调用附属于TextStream对象的ReadLine、WriteLine、Read、ReadAll、Write...等方法来存取文件的内容。只有在写入的时候才需要创建textstream对象
打开指定的文件并返回一个 TextStream 对象,可以通过这个对象对文件进行读、写或追加。
object.OpenTextFile(filename[, iomode[, create[, format]]])
参数
object
必选项。object 应为 FileSystemObject 的名称。
filename
必选项。指明要打开文件的字符串表达式。
iomode
可选项。可以是三个常数之一:ForReading 、 ForWriting 或 ForAppending 。
create
可选项。Boolean 值,指明当指定的 filename 不存在时是否创建新文件。如果创建新文件则值为 True ,如果不创建则为 False 。如果忽略,则不创建新文件。
format
可选项。使用三态值中的一个来指明打开文件的格式。如果忽略,那么文件将以 ASCII 格式打开。
设置
iomode 参数可以是下列设置中的任一种:
常数 值 描述
ForReading 1 以只读方式打开文件。不能写这个文件。
ForWriting 2 以写方式打开文件
ForAppending 8 打开文件并从文件末尾开始写。
或直接的在建立textstream的同时,createtextfilter
dim filename,filecontent
filename=replace(date(),"-","")
randomize
filename=filename&cstr(int(rnd(10)*100000))&".htm"
htmlname=filename
set fso=server.CreateObject("scripting.filesystemobject")
if fso.folderexists(server.MapPath("demo"))=false then
fso.createfolder(server.MapPath("demo"))
end if
filename=server.MapPath("demo")&"/"&filename
set myfile=fso.opentextfile(filename,2,true)'true表示没有时,创建。因此不需要单独的检测是否存在
filecontent="fdsfsdfdfdfd"
myfile.write(filecontent)
移动、复制和删除文件
FSO 对象模型各有两种方法移动、复制和删除文件,如下表所述。
任务 方法
移动文件 File.Move 或 FileSystemObject.MoveFile
复制文件 File.Copy 或 FileSystemObject.CopyFile
删除文件 File.Delete 或 FileSystemObject.DeleteFile
下面示例在驱动器 C 的根目录中创建一个文本文件,向其中写一些信息,然后把它移动到 \tmp 目录中,并在 \temp 中做一个备份,最后把它们从两个目录中删掉。
要运行下面的示例,需要先在驱动器 C 的根目录中创建 \tmp 和 \temp 目录:
[VBScript]
Sub ManipFiles
Dim fso, f1, f2, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
Response.Write "Writing file <br>"
' 写入一行。
f1.Write ("This is a test.")
' 关闭写入到的文件。
f1.Close
Response.Write "Moving file to c:\tmp <br>"
' 获取到 C:\ 根目录中文件的句柄。
Set f2 = fso.GetFile("c:\testfile.txt")
' 将文件移到 \tmp 目录。
f2.Move ("c:\tmp\testfile.txt")
Response.Write "Copying file to c:\temp <br>"
' 将文件复制到 \temp。
f2.Copy ("c:\temp\testfile.txt")
Response.Write "Deleting files <br>"
' 获得文件当前位置的句柄。
Set f2 = fso.GetFile("c:\tmp\testfile.txt")
Set f3 = fso.GetFile("c:\temp\testfile.txt")
' 删除文件。
f2.Delete
f3.Delete
Response.Write "All done!"
End Sub