2009年6月13日 星期六

方便好用的FileSystemObject

從VB6.0起,VB新增了FileSystemObject物件,這個物件可以取代以往許多要用API才能做到的事,如覆製資料夾、取得磁碟機資訊
等,在作一些相關處理時可以節省不少時間。要引用這個項目你必須以設定引用項目將 Microsoft ScriptingRuntime手動加入專
案,否則是沒有辦法使用的!我來概略說明一下使用的方法和功能
包括資料夾複製、檔案複製
建立資料夾
建立文字檔
刪除資料夾、檔案
取得Windows路徑,System路徑
取得所有的磁碟機
磁碟機總數(包含網路磁碟機等)
取得所有磁碟機物件



20 則留言:

吳老師 提到...

資料夾複製、檔案複製

fso.CopyFolder "C:\ABC","C:\DEF"
fso.FileCopy "c:\123.txt","c:\456.txt"

吳老師 提到...

建立資料夾
fso.CreateFolder "C:\ABC"

吳老師 提到...

建立文字檔
fso.CreateTextFile "c:\123.txt"

吳老師 提到...

刪除資料夾、檔案
fso.DeleteFolder "C:\ABC"
fso.DeleteFile "c:\123.txt"

吳老師 提到...

取得Windows路徑,System路徑
fso.GetSpecialFolder(WindowsFolder)
fso.GetSpecialFolder(SystemFolder)

吳老師 提到...

取得所有的磁碟機
磁碟機總數(包含網路磁碟機等) - fso.Drives.Count

吳老師 提到...

取得所有磁碟機物件

Dim Drivetemp As Drive
ReDim DriveObject(1 To fso.Drives.Count)
Dim i As Integer

For Each Drivetemp In fso.Drives
i = i + 1
Set DriveObject(i) = Drivetemp
Next

吳老師 提到...

查詢該磁碟機的可用空間
fso.AvailableSpace

fso.FreeSpace

吳老師 提到...

查詢該磁碟機的總容量
fso.TotalSize

吳老師 提到...

磁碟機的代碼
fso.DriveLetter
fso.RootPath

*DriveLetter只有代碼
*RootPath則可查出根目錄的路徑

吳老師 提到...

磁碟機的類別
fso.DriveType

傳回值分別代表
Unknown - "無從判斷"
Removable - "抽取式磁碟"
Fixed - "硬碟"
Remote - "遠端(網路)儲存裝置"
CDRom - "光碟機"
RamDisk - "RAM Disk"

吳老師 提到...

取得資料夾的資料

Dim fs As New FileSystemObject ' 建立 FileSystemObject
Dim fd As Folder ' 宣告 Folder 物件
Dim i As Integer

Set fd = fs.GetFolder("c:\")

吳老師 提到...

取得子資料夾的總數

Dim fs As New FileSystemObject ' 建立 FileSystemObject
Dim fd As Folder ' 宣告 Folder 物件
Dim i As Integer

Set fd = fs.GetFolder("c:\")
fd.SubFolders.Count

ReDim sfd(1 To fd.SubFolders.Count) As Folder
For Each fd In fd.SubFolders
i = i + 1
Set sfd(i) = Folder
List1.AddItem sfd(i).Name
Next

這個方法只能取得一層子資料夾,如果要取得所有資料夾則
須利用遞迴重覆執行

Folder的屬性比較特殊的是ShortPath可以直接取得該
Folder的短檔名及DateCreated、DateLastAccessed、
DateLastModified可取得建立時間及變更時間等
至於File物件只要改用GetFile方法,其餘沒有什麼特別不同的方法

吳老師 提到...

範例1.
檔案的建立時間、副檔名、大小

Dim getInfo As System.IO.FileInfo
getInfo = My.Computer.FileSystem.GetFileInfo("C:\WPD04.DOC")
MsgBox("這個檔案的建立時間為" & getInfo.CreationTime & Chr(10) & _
"這個檔案的副檔名為" & getInfo.Extension & Chr(10) & _
"這個檔案的大小為" & getInfo.Length & "位元組")
My.Computer.FileSystem.CopyFile("C:\WPD04.DOC", "D:\WPD04.DOC")
Close()

吳老師 提到...

範例2.
是否唯讀?

Dim getInfo As System.IO.DirectoryInfo
getInfo = My.Computer.FileSystem.GetDirectoryInfo("C:\WINDOWS")
If (getInfo.Attributes And System.IO.FileAttributes.ReadOnly) > 0
Then
MsgBox("C:\WINDOWS是唯讀的")
Else
MsgBox("C:\WINDOWS不是唯讀的")
End If
Close()

吳老師 提到...

範例3.
磁碟的相關資訊:

Dim getInfo As System.IO.DriveInfo
getInfo = My.Computer.FileSystem.GetDriveInfo("C:\")
MsgBox("C:磁碟的標籤為" & getInfo.VolumeLabel & Chr(10) & _
"C:磁碟的類型為" & getInfo.DriveType & Chr(10) & _
"C:磁碟的全部空間為" & getInfo.TotalSize & Chr(10) & _
"C:磁碟的檔案系統為" & getInfo.DriveFormat)
MsgBox(System.Environment.SystemDirectory)
Close()

吳老師 提到...

範例4.
讀取文字檔:

Dim content As String
content = My.Computer.FileSystem.ReadAllText("c:\WPD04.DOC",
System.Text.Encoding.Default)
MsgBox(content)
Close()

吳老師 提到...

範例5.
逐行讀取文字檔:

Dim textreader As System.IO.StreamReader
textreader=My.Computer.FileSystem.OpenTextFileReader("C:\P5PE1501.TXT",
System.Text.Encoding.Unicode)
Dim aLine As String = textreader.ReadLine()
While Not (aLine Is Nothing)
content = content & aLine & Chr(10)
aLine = textreader.ReadLine()
End While
textreader.Close()
MsgBox(content)
Close()

吳老師 提到...

6.剖析文字檔:
Using textparser As New
Microsoft.VisualBasic.FileIO.TextFieldParser("C:\P5PE1501.TXT")
textparser.TextFieldType = FileIO.FieldType.Delimited
textparser.SetDelimiters(",")
Dim content As String = ""
While Not textparser.EndOfData
Try
Dim row As String() = textparser.ReadFields()
For Each field As String In row
content = content & field & Chr(10)
Next
Catch ex As
Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("無法使用指定的格式剖析文字檔")
End Try
End While
MsgBox(content)
End Using
Close()

吳老師 提到...

範例7.
剖析文字檔:

Using textparser As New
Microsoft.VisualBasic.FileIO.TextFieldParser("C:\score.txt",
System.Text.Encoding.Default)
textparser.TextFieldType = FileIO.FieldType.FixedWidth
textparser.SetFieldWidths(2, 3, -1)
Dim content As String = ""
While Not textparser.EndOfData
Try
Dim row As String() = textparser.ReadFields()
For Each field As String In row
content = content & field & Chr(10)
Next
Catch ex As
Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("無法使用指定的格式剖析文字檔")
End Try
End While
MsgBox(content)
End Using
Close()