使用驱动器 下面是使用FileSystemObject对象的简单例子,它使用DriveExists方法得到现有的驱动器字母的列表: ‘ In VBscript Set objFSO = Server.CreateObject(“scripting.FileSystemObject”) For intCode = 65 To 90 ‘ANSI codes for ‘A’ to ‘Z’ strLetter = Chr(intCode) If objFSO.DriveExists(strLetter) Then Response.Write “Found drive “ & strLetter & “:<BR>” End If Next 或用Jscript: // In Jscript var objFSO = Server.CreateObject(‘scripting.FileSystemObject’); for (var intCode = 65; intCode <= 90; intCode++) { //ANSI codes for ‘A’ to ‘Z’ strLetter = String.formCharCode(intCode); If (objFSO.DriveExists(strLetter)) Response.Write (‘Found drive ‘ + strLetter + “:<BR>”); }
1. Drive对象 正如已经看到的,FileSystemObject对象包含一个属性——Drives,它返回一个包括本地计算机上所有可用驱动器的集合。 Drives集合里的每个条目是一个Drive对象。
AvailableSpave 考虑了帐户定额和/或其他限制,返回驱动器上对于该用户可用的空间的大小
DriveLetter 返回驱动器的字母
DriveType 返回驱动器的类型。返回值可以是Unknown(0)、Removeable(1)、Fixed(2)、Network(3)、CDRom(4)和RamDisk(5)。然而需要注意的是当前版本的scrrun.dll不支持预定义常数Network,必须使用十进制3来代替
FileSystem 返回驱动器文件系统的类型。返回值包括“FAT”、“NTFS”和“CDFS”
FreeSpace 返回驱动器上可用剩余空间的总量
IsReady 返回一个布尔值表明驱动器是否已准备好
Path 返回一个由驱动器字母和冒号组成的驱动器路径,即“C:”
RootFolder 返回代表的驱动器根目录文件夹的Folder对象
SerialNumber 返回一个用于识别磁盘卷的十进制的序列号
ShareName 如果是一个网络驱动器,返回该驱动器的网络共享名
TotalSize 返回驱动器的总容量(以字节为单位)
VolumeName 设定或返回本地驱动器卷名
因此,通过使用Drives集合里的Drive对象,可以在服务器上产生一个驱动器列表,与通过检查每个可能的驱动器字母来判别驱动器是否存在的方法相比,效率更高。我们也可以得到关于该驱动器的信息。在VBscript里,代码如下: "" In VBscript: "" create a FileSystemObject instance Set objFSO = Server.CreateObject("scripting.FileSystemObject") "" create a Drives collection Set colDrives = objFSO.Drives "" iterate through the Drives collection For Each objDrive in colDrives
Response.Write "DriveLetter: <B>" & objDrive.DriveLetter & "</B> " Response.Write "DriveType: <B>" & objDrive.DriveType Select Case objDrive.DriveType Case 0: Response.Write " - (Unknown)" Case 1: Response.Write " - (Removable)" Case 2: Response.Write " - (Fixed)" Case 3: Response.Write " - (Network)" Case 4: Response.Write " - (CDRom)" Case 5: Response.Write " - (RamDisk)" End Select Response.Write "</B> "
If objDrive.DriveType = 3 Then If objDrive.IsReady Then Response.Write "Remote drive with ShareName: <B>" & objDrive.ShareName & "</B>" Else Response.Write "Remote drive - <B>IsReady</B> property returned_ <B>False</B><BR>" End If Else If objDrive.IsReady then Response.Write "FileSystem: <B>" & objDrive.FileSystem & "</B> " Response.Write "SerialNumber: <B>" & objDrive.SerialNumber & "</B><BR>" Response.Write "Local drive with VolumeName: <B>" & _ objDrive.VolumeName & "</B><BR>" Response.Write "AvailableSpace: <B>" & FormatNumber( _ objDrive.AvailableSpace / 1024, 0) & "</B> KB " Response.Write "FreeSpace: <B>" & FormatNumber( _ objDrive.FreeSpace / 1024, 0) & "</B> KB " Response.Write "TotalSize: <B>" & FormatNumber(_ objDrive.TotalSize / 1024, 0) & "</B> KB" End if Response.Write "<P>" End if Next 注意,不能用预定义常数Network比较驱动器的DriveType属性,因为(至少在scrrun.dll的当前版本中)在类型库中省略了Network常数,因此不再作为公用的常数使用。 在Jscript中,该程序是: // In Jscript: // create a FileSystemObject instance var objFSO = Server.CreateObject(""scripting.FileSystemObject""); // create a Drives collection var colDrives = new Enumerator(objFSO.Drives);
for (; !colDrives.atEnd(); colDrives.moveNext()) { objDrive = colDrives.item(); Response.Write(""DriveLetter: "" + objDrive.DriveLetter + ""<BR>""); Response.Write(""DriveType: "" + objDrive.DriveType + ""<BR>"");
if (objDrive.DriveType == 3) if (objDrive.IsReady) Response.Write(""Remote drive with ShareName: "" + objDrive.ShareName + ""<BR>"") else Response.Write(""Remote drive - IsReady property returned False<BR><BR>""); else if (objDrive.IsReady) { Response.Write(""Local drive with VolumeName: "" + objDrive.VolumeName + ""<BR>""); Response.Write(""FileSystem: "" + objDrive.FileSystem + ""<BR>""); Response.Write(""SerialNumber: "" + objDrive.SerialNumber + ""<BR>""); Response.Write(""AvailableSpace: "" + objDrive.AvailableSpace + "" bytes<BR>""); Response.Write(""FreeSpace: "" + objDrive.FreeSpace + "" bytes<BR>""); Response.Write(""TotalSize: "" + objDrive.TotalSize + "" bytes<P>""); } } 在系统上运行这段程序以前有一点要注意。如果在A驱动器里没有磁盘,或CD-ROM驱动器里没有光盘,将得到一个错误提示:“Disk Not Ready”。除了DriveLetter属性和DriveType属性外,在使用其他属性和方法前,通过检查每个驱动器的IsReady属性,可以保护该页面。
一般在适当的权限配置下,在虚拟主机上很难读取服务器的磁盘信息。
|