2009年6月14日

方便好用的FileSystemObject

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

包括資料夾複製、檔案複製
建立資料夾
建立文字檔
刪除資料夾、檔案
取得Windows路徑,System路徑

取得所有的磁碟機
磁碟機總數(包含網路磁碟機等)

取得所有磁碟機物件

......
http://docs.google.com/View?id=dfh4b3dv_1365qsf8bzfq


更多影音教學與討論,請上[溫馨論壇]

20 則留言:

  1. 資料夾複製、檔案複製

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

    回覆刪除
  2. 建立資料夾
    fso.CreateFolder "C:\ABC"

    回覆刪除
  3. 建立文字檔
    fso.CreateTextFile "c:\123.txt"

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

    回覆刪除
  5. 取得Windows路徑,System路徑
    fso.GetSpecialFolder(WindowsFolder)
    fso.GetSpecialFolder(SystemFolder)

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

    回覆刪除
  7. 取得所有磁碟機物件

    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

    回覆刪除
  8. 查詢該磁碟機的可用空間
    fso.AvailableSpace

    fso.FreeSpace

    回覆刪除
  9. 查詢該磁碟機的總容量
    fso.TotalSize

    回覆刪除
  10. 磁碟機的代碼
    fso.DriveLetter
    fso.RootPath

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

    回覆刪除
  11. 磁碟機的類別
    fso.DriveType

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

    回覆刪除
  12. 取得資料夾的資料

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

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

    回覆刪除
  13. 取得子資料夾的總數

    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方法,其餘沒有什麼特別不同的方法

    回覆刪除
  14. 範例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()

    回覆刪除
  15. 範例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()

    回覆刪除
  16. 範例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()

    回覆刪除
  17. 範例4.
    讀取文字檔:

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

    回覆刪除
  18. 範例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()

    回覆刪除
  19. 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()

    回覆刪除
  20. 範例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()

    回覆刪除