随笔-16  评论-8  文章-30  trackbacks-0
使用 FileSystemObject (FSO) 对象模式,可以有计划地处理驱动器和文件夹,就像在 Windows 资源管理器中交互式地处理它们一样。可以复制和移动文件夹,获取有关驱动器和文件夹的信息,等等。

获取有关驱动器的信息
可以用 Drive 对象来获得有关各种驱动器的信息,这些驱动器是实物地或通过网络连接到系统上的。它的属性可以用来获得下面的信息内容:

  • 驱动器的总容量,以字节为单位(TotalSize 属性)
  • 驱动器的可用空间是多少,以字节为单位(AvailableSpaceFreeSpace 属性)
  • 哪个号被赋给了该驱动器(DriveLetter 属性)
  • 驱动器的类型是什么,如可移动的、固定的、网络的、CD-ROM 或 RAM 磁盘(DriveType 属性)
  • 驱动器的序列号(SerialNumber 属性)
  • 驱动器使用的文件系统类型,如 FAT、FAT32、NTFS 等等(FileSystem 属性)
  • 驱动器是否可以使用(IsReady 属性)
  • 共享和/或卷的名字(ShareNameVolumeName 属性)
  • 驱动器的路径或根文件夹(PathRootFolder 属性)
请考察示例代码,来领会如何在 FileSystemObject 中使用这些属性。

Drive 对象的用法示例
使用 Drive 对象来收集有关驱动器的信息。在下面的代码中,没有对实际的 Drive 对象的引用;相反,使用 GetDrive 方法来获得现有 Drive 对象的引用(在这个例子中就是 drv)。

下面示例示范了如何在 VBScript 中使用 Drive 对象:

Sub ShowDriveInfo(drvPath)
  Dim fso, drv, s
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
  s = "Drive " & UCase(drvPath) & " - "
  s = s & drv.VolumeName & "<br>"
  s = s & "Total Space: " & FormatNumber(drv.TotalSize / 1024, 0)
  s = s & " Kb" & "<br>"
  s = s & "Free Space: " & FormatNumber(drv.FreeSpace / 1024, 0)
  s = s & " Kb" & "<br>"
  Response.Write s
End Sub
下面的代码说明在 JScript 中实现同样的功能:
function ShowDriveInfo1(drvPath)
{
  var fso, drv, s ="";
  fso = new ActiveXObject("Scripting.FileSystemObject");
  drv = fso.GetDrive(fso.GetDriveName(drvPath));
  s += "Drive " + drvPath.toUpperCase()+ " - ";
  s += drv.VolumeName + "<br>";
  s += "Total Space: " + drv.TotalSize / 1024;
  s += " Kb" + "<br>"; 
  s += "Free Space: " + drv.FreeSpace / 1024;
  s += " Kb" + "<br>";
  Response.Write(s);
}
处理文件夹
在下面的表中,描述了普通的文件夹任务和执行它们的方法。

任务 方法
创建文件夹。 FileSystemObject.CreateFolder
删除文件夹。 Folder.DeleteFileSystemObject.DeleteFolder
移动文件夹。 Folder.MoveFileSystemObject.MoveFolder
复制文件夹。 Folder.CopyFileSystemObject.CopyFolder
检索文件夹的名字。 Folder.Name
如果文件夹在驱动器上存在,则找出它。 FileSystemObject.FolderExists
获得现有 Folder 对象的实例。 FileSystemObject.GetFolder
找出文件夹的父文件夹名。 FileSystemObject.GetParentFolderName
找出系统文件夹的路径。 FileSystemObject.GetSpecialFolder

请考察示例代码,来看看在 FileSystemObject 中使用了多少种这些的方法和属性。

下面的示例示范了如何在 VBScript 中使用 FolderFileSystemObject 对象,来操作文件夹和获得有关它们的信息:

Sub ShowFolderInfo()
  Dim fso, fldr, s
  ' 获得 FileSystemObject 的实例。
  Set fso = CreateObject("Scripting.FileSystemObject")
  ' 获得 Drive 对象。
  Set fldr = fso.GetFolder("c:")
  ' 打印父文件夹名字。
  Response.Write "Parent folder name is: " & fldr & "<br>"
  ' 打印驱动器名字。
  Response.Write "Contained on drive " & fldr.Drive & "<br>"
  ' 打印根文件名。
  If fldr.IsRootFolder = True Then
    Response.Write "This is the root folder." & ""<br>"<br>"
  Else
    Response.Write "This folder isn't a root folder." & "<br><br>" 
  End If
  ' 用 FileSystemObject 对象创建新的文件夹。
  fso.CreateFolder ("C:\Bogus")
  Response.Write "Created folder C:\Bogus" & "<br>"
  ' 打印文件夹的基本名字。
  Response.Write "Basename = " & fso.GetBaseName("c:\bogus") & "<br>"
  ' 删除新创建的文件夹。
  fso.DeleteFolder ("C:\Bogus")
  Response.Write "Deleted folder C:\Bogus" & "<br>"
End Sub
下面的示例显示如何在 JScript 中使用 FolderFileSystemObject 对象:
function ShowFolderInfo()
{
  var fso, fldr, s = "";
  // 获得 FileSystemObject 的实例。
  fso = new ActiveXObject("Scripting.FileSystemObject");
  // 获得 Drive 对象。
  fldr = fso.GetFolder("c:");
  // 打印父文件夹名。
  Response.Write("Parent folder name is: " + fldr + "<br>");
  // 打印驱动器名字。
  Response.Write("Contained on drive " + fldr.Drive + "<br>");
  // 打印根文件名。
  if (fldr.IsRootFolder)
    Response.Write("This is the root folder.");
  else
    Response.Write("This folder isn't a root folder.");
  Response.Write("<br><br>");
  // 用 FileSystemObject 对象创建新的文件夹。
  fso.CreateFolder ("C:\\Bogus");
  Response.Write("Created folder C:\\Bogus" + "<br>");
  // 打印文件夹的基本名。
  Response.Write("Basename = " + fso.GetBaseName("c:\\bogus") + "<br>");
  // 删除新创建的文件夹。
  fso.DeleteFolder ("C:\\Bogus");
  Response.Write("Deleted folder C:\\Bogus" + "<br>");
}
 

处理文件
有两种主要的文件处理类型:

  • 创建、添加或删除数据,以及读取文件
  • 移动、复制和删除文件
创建文件
创建空文本文件(有时被叫做“文本流”)有三种方法。

第一种方法是用 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 中使用 CreateTextFile 方法。

创建文本文件的第二种方法是,使用 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);
添加数据到文件中
一旦创建了文本文件,使用下面的三个步骤向文件添加数据:

  1. 打开文本文件。
  2. 写入数据。
  3. 关闭文件。
要打开现有的文件,则使用 FileSystemObject 对象的 OpenTextFile 方法或 File 对象的 OpenAsTextStream 方法。

要写数据到打开的文本文件,则根据下表所述任务使用 TextStream 对象的 WriteWriteLineWriteBlankLines 方法。

任务方法
向打开的文本文件写数据,不用后续一个新行字符。Write
向打开的文本文件写数据,后续一个新行字符。WriteLine
向打开的文本文件写一个或多个空白行。WriteBlankLines

请考察示例代码,来领会如何在 FileSystemObject 对象中使用 WriteWriteLineWriteBlankLines 方法。

要关闭一个打开的文件,则使用 TextStream 对象的 Close 方法。

请考察示例代码,来领会如何在 FileSystemObject 中使用 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 对象的 ReadReadLineReadAll 方法。下表描述了不同的任务应使用哪种方法。

任务方法
从文件读取指定数量的字符。Read
读取一整行(一直到但不包括新行字符)。ReadLine
读取文本文件的整个内容。ReadAll

请考察示例代码,来领会如何在 FileSystemObject 中使用 ReadAllReadLine 方法。

如果使用 ReadReadLine 方法,并且想跳过数据的特殊部分,则使用 SkipSkipLine 方法。read 方法的结果文本存在一个字符串中,该字符串可以显示在一个控件中,也可以用字符串函数(如 LeftRightMid)来分析,连接等等。

下面的 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.MoveFileSystemObject.MoveFile
复制文件File.CopyFileSystemObject.CopyFile
删除文件File.DeleteFileSystemObject.DeleteFile

请考察示例代码,来领会在 FileSystemObject 中删除文件的两种方法。

下面的 VBScript 示例,在驱动器 C 的根目录中创建一个文本文件,向其中写一些信息,然后把它移动到 \tmp 目录中,并在 \temp 中做一个备份,最后把它们从两个目录中删掉。

要运行下面的示例,需要先在驱动器 C 的根目录中创建 \tmp 和 \temp 目录:

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 的根目录(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 的根目录(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!");
}
posted on 2005-06-10 15:07 楚客 阅读(311) 评论(0)  编辑  收藏 所属分类: HTML

只有注册用户登录后才能发表评论。


网站导航: