在編程中,我們經常需要對文件系統中的驅動器、文件夾和文件進行處理,比如收集驅動器的相關信息;創建、添加、移動或刪除文件夾和文件等。在VB6中新提供了一套稱為FSO(FileSystemObject)對象模型來對文件系統進行訪問處理。該模型提供了一個基於對象的工具,通過它所提供的一系列屬性和方法,我們可以在應用程序中更簡單、靈活地對文件系統進行各種操作。
一、FSO簡介
FSO對象模型包含以下幾種對象:
Drive對象:允許收集系統物理或通過LAN與系統邏輯連接的硬盤、CD-ROM等驅動器的可用空間、共享名等信息。
Folder對象:允許創建、刪除或移動文件夾,並向系統查詢文件夾的名稱、路徑等。
Files對象:允許創建、刪除或移動文件,並向系統查詢文件的名稱、路徑等。
TextStream對象:允許創建和讀寫文本文件。
FileSystemObject對象:提供一整套用於驅動器、文件夾和文件操作的方法,在功能上可以把它看作是上面幾個對象的集合並且經常與它們配合使用。與該對象相關聯的很多方法重復了前面四個對象中的方法,因此我們既可以通過FileSystemObject對象來對驅動器、文件夾和文件進行大多數操作,也可以通過對應的驅動器、文件夾或文件對象對這些組件進行操作。FSO模型通過兩種方法實現對同一對象的操作,其操作效果是相同的,提供這種冗余功能的目的是為了實現最大的編程靈活性。
FSO對象模型包含在一個稱為Scripting的類型庫中,此類型庫位於Scrrun.dll文件中,可從“工程”選單的“引用”對話框中選擇“MicrosoftScriptingRuntime”項來引用此文件。
創建一個FileSystemObject對象,可以通過如下兩種方法來完成:1將一個變量聲明為FileSystemObject對象類型:DimfsoAsNewFileSystemObject;2使用CreateObject方法來創建:Setfso=CreateObject(″Scripting.FileSystemObject″)。
二、對驅動器的操作
對驅動器的操作主要通過Drive對象並配合FileSystemObject對象,FSO不支持進行創建或刪除驅動器的操作,而只允許收集關於系統所用驅動器的信息。通過該對象的屬性可以獲得下列信息:以字節表示的驅動器可用空間(AvailableSpace或FreeSpace);為驅動器指定的字母號(DriveLetter);驅動器類型(DriveType);驅動器使用的文件系統類型,諸如FAT、FAT32、NTFS等(FileSystem);驅動器是否可用(IsReady);驅動器的路徑或根文件夾(Path和RootFolder);驅動器序列號(SerialNumber);共享名或卷標名(ShareName和VolumeName);以字節表示的驅動器總空間(TotalSize)。下面一例說明了如何收集有關驅動器的信息:
PrivateSubCommand1—Click()
DimfsoAsNewFileSystemObject,drvAsDrive,strAsString
Setdrv=fso.GetDrive(fso.GetDriveName(″c:″))
Debug.Print″TotalSpace:″&FormatNumber(drv.TotalSize/1024,0)&″Kb″
Debug.Print″FreeSpace:″&FormatNumber(drv.FreeSpace/1024,0)&″Kb″
EndSub
三、對文件夾的操作
Folder對象允許通過所提供的方法來復制(Copy)、刪除(Delete)或移動(Move)文件夾,並通過其屬性向系統查詢其名稱(Name)、路徑(Path)以及創建日期(DateCreated)等。FileSystemObject對象對文件夾的操作方法有創建(CreateFolder)、復制(CopyFolder)、移動(MoveFolder)和刪除(DeleteFolder)。在進行上述操作之前,首先要獲得該文件夾的訪問句柄(GetFolder)。下例說明了如何對文件夾進行操作:
PrivateSubCommand2—Click()
DimfsoAsNewFileSystemObject,fldrAsFolder
Setfldr=fso.GetFolder(″c:″)
′獲得當前文件夾的訪問句柄
Debug.Print″Parentfoldernameis:″&fldr
′打印文件夾名
Debug.Print″Containedondrive″&fldr.Drive ′打印驅動器名
fso.CreateFolder(″c:Temp″)
′用FileSystemObject對象創建一個新的文件夾
fso.DeleteFolder(″c:Temp″)
′刪除新建的文件夾
EndSub
訪問一個對象,要首先用“Get”方法獲得該對象的訪問句柄,但如果是用“Create”函數新創建一個對象,函數會返回一個句柄到新創建的對象,這時只要設置一個變量來獲取該句柄即可,不必再用“Get”方法。如:Setfldr=fso.CreateFolder(″C:Temp2″)。
四、對文件的操作
讀寫文件,在VB6之前都是使用Open等語句來實現,FSO支持通過TextStream對象來創建和讀寫文本文件。
FSO通過CreateTextFile、OpenTextFile、OpenAsTextStream三種方法來創建一個順序文本文件。文件創建後,就可分三步寫入數據:
1.利用FileSystemObject對象的OpenTextFile方法或File對象的OpenAsTextStream方法打開文本文件以備寫入數據。
2.使用TextStream對象的Write、WriteLine或WriteBlankLines方法寫入數據。
3.使用TextStream對象的Close方法關閉文件。
下例說明了如何創建文本文件:
我們可使用TextStream對象的Read、ReadLine或ReadAll方法從一個文本文件中讀取數據。
PrivateSubCommand3—Click()
DimfsoAsNewFileSystemObject,filAsFile,tsAsTextStream
fso.CreateTextFile″c: estfile.txt″
Setfil=fso.GetFile(″c: estfile.txt″)
Setts=fil.OpenAsTextStream(ForWriting)
ts.Write(″這是一個測試文件!″)
ts.Close
Setts=fil.OpenAsTextStream(ForReading)
s=ts.ReadLine
MsgBoxs
ts.Close
EndSub
除了創建與讀寫文件之外,VB6還可通過FileSystemObject對象對文件進行復制(CopyFile)、移動(MoveFile)與刪除(DeleteFile)等操作,在File對象中等效的方法有Copy、Move和Delete。例程如下:
PrivateSubCommand4—Click()
DimfsoAsNewFileSystemObject,txtfileAsTextStream,fil1AsFile,fil2AsFile
Settxtfile=fso.CreateTextFile(″c: estfile.txt″,True)
txtfile.Write(″這是一個測試文件!″)
txtfile.Close
Setfil1=fso.GetFile(″c: estfile.txt″)
′獲得一個文件句柄
fil1.Copy(″c: emp1 estfile.txt″)
′將該文件復制到 emp1目錄下
fil1.Move(″c: emp2 estfile.txt″)
′將該文件移動到 emp2目錄下
Setfil1=fso.GetFile(″c: emp1 estfile.txt″)
′獲得這些文件當前位置的句柄
Setfil2=fso.GetFile(″c: emp2 estfile.txt″)
fil1.Delete
fil2.Delete
EndSub->