FSO 大全

FSO 大全

如何删除一个文件
[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: 设置目录权限
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值