Szukaj…


Tworzenie obiektu FileSystemObject

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Sub FsoExample()
    Dim fso As Object ' declare variable
    Set fso = CreateObject("Scripting.FileSystemObject") ' Set it to be a File System Object

    ' now use it to check if a file exists
    Dim myFilePath As String
    myFilePath = "C:\mypath\to\myfile.txt"
    If fso.FileExists(myFilePath) Then
        ' do something
    Else
        ' file doesn't exist
        MsgBox "File doesn't exist"
    End If
End Sub

Odczytywanie pliku tekstowego za pomocą FileSystemObject

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Sub ReadTextFileExample()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim sourceFile As Object
    Dim myFilePath As String
    Dim myFileText As String

    myFilePath = "C:\mypath\to\myfile.txt"
    Set sourceFile = fso.OpenTextFile(myFilePath, ForReading)
    myFileText = sourceFile.ReadAll ' myFileText now contains the content of the text file
    sourceFile.Close ' close the file
    ' do whatever you might need to do with the text

    ' You can also read it line by line
    Dim line As String
    Set sourceFile = fso.OpenTextFile(myFilePath, ForReading)
    While Not sourceFile.AtEndOfStream ' while we are not finished reading through the file
        line = sourceFile.ReadLine
        ' do something with the line...
    Wend
    sourceFile.Close
End Sub

Tworzenie pliku tekstowego za pomocą FileSystemObject

Sub CreateTextFileExample()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim targetFile As Object
    Dim myFilePath As String
    Dim myFileText As String

    myFilePath = "C:\mypath\to\myfile.txt"
    Set targetFile = fso.CreateTextFile(myFilePath, True)  ' this will overwrite any existing file
    targetFile.Write "This is some new text"
    targetFile.Write " And this text will appear right after the first bit of text."
    targetFile.WriteLine "This bit of text includes a newline character to ensure each write takes its own line."
    targetFile.Close ' close the file
End Sub

Zapis do istniejącego pliku za pomocą FileSystemObject

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8


Sub WriteTextFileExample()
    Dim oFso
    Set oFso = CreateObject("Scripting.FileSystemObject")

    Dim oFile as Object
    Dim myFilePath as String
    Dim myFileText as String

    myFilePath = "C:\mypath\to\myfile.txt"
    ' First check if the file exists
    If oFso.FileExists(myFilePath) Then
        ' this will overwrite any existing filecontent with whatever you send the file
        ' to append data to the end of an existing file, use ForAppending instead
        Set oFile = oFso.OpenTextFile(myFilePath, ForWriting)  
    Else
        ' create the file instead
        Set oFile = oFso.CreateTextFile(myFilePath) ' skipping the optional boolean for overwrite if exists as we already checked that the file doesn't exist.
    End If
    oFile.Write "This is some new text"
    oFile.Write " And this text will appear right after the first bit of text."
    oFile.WriteLine "This bit of text includes a newline character to ensure each write takes its own line."
    oFile.Close ' close the file
End Sub

Wylicz pliki w katalogu za pomocą FileSystemObject

Wczesne powiązanie (wymaga odniesienia do środowiska wykonawczego skryptów Microsoft):

Public Sub EnumerateDirectory()
    Dim fso As Scripting.FileSystemObject
    Set fso = New Scripting.FileSystemObject

    Dim targetFolder As Folder
    Set targetFolder = fso.GetFolder("C:\")
    
    Dim foundFile As Variant
    For Each foundFile In targetFolder.Files
        Debug.Print foundFile.Name
    Next
End Sub

Późne wiązanie:

Public Sub EnumerateDirectory()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim targetFolder As Object
    Set targetFolder = fso.GetFolder("C:\")
    
    Dim foundFile As Variant
    For Each foundFile In targetFolder.Files
        Debug.Print foundFile.Name
    Next
End Sub

Rekurencyjnie wyliczaj foldery i pliki

Early Bound (w odniesieniu do Microsoft Scripting Runtime )

Sub EnumerateFilesAndFolders( _
    FolderPath As String, _
    Optional MaxDepth As Long = -1, _
    Optional CurrentDepth As Long = 0, _
    Optional Indentation As Long = 2)
  
    Dim FSO As Scripting.FileSystemObject
    Set FSO = New Scripting.FileSystemObject
    
    'Check the folder exists
    If FSO.FolderExists(FolderPath) Then
        Dim fldr As Scripting.Folder
        Set fldr = FSO.GetFolder(FolderPath)
        
        'Output the starting directory path
        If CurrentDepth = 0 Then
          Debug.Print fldr.Path
        End If
        
        'Enumerate the subfolders
        Dim subFldr As Scripting.Folder
        For Each subFldr In fldr.SubFolders
            Debug.Print Space$((CurrentDepth + 1) * Indentation) & subFldr.Name
            If CurrentDepth < MaxDepth Or MaxDepth = -1 Then
                'Recursively call EnumerateFilesAndFolders
                EnumerateFilesAndFolders subFldr.Path, MaxDepth, CurrentDepth + 1, Indentation
            End If
        Next subFldr
        
        'Enumerate the files
        Dim fil As Scripting.File
        For Each fil In fldr.Files
            Debug.Print Space$((CurrentDepth + 1) * Indentation) & fil.Name
        Next fil
    End If
End Sub

Dane wyjściowe wywoływane przy użyciu takich argumentów jak: EnumerateFilesAndFolders "C:\Test"

C:\Test
  Documents
    Personal
      Budget.xls
      Recipes.doc
    Work
      Planning.doc
  Downloads
    FooBar.exe
  ReadMe.txt

Dane wyjściowe są wywoływane przy użyciu takich argumentów, jak: EnumerateFilesAndFolders "C:\Test", 0

C:\Test
  Documents
  Downloads
  ReadMe.txt

Dane wyjściowe są wywoływane przy użyciu takich argumentów, jak: EnumerateFilesAndFolders "C:\Test", 1, 4

C:\Test
    Documents
        Personal
        Work
    Downloads
        FooBar.exe
    ReadMe.txt

Usuń rozszerzenie pliku z nazwy pliku

Dim fso As New Scripting.FileSystemObject
Debug.Print fso.GetBaseName("MyFile.something.txt")

Wyświetla MyFile.something

Zauważ, że metoda GetBaseName() obsługuje już wiele kropek w nazwie pliku.

Pobierz tylko rozszerzenie z nazwy pliku

Dim fso As New Scripting.FileSystemObject
Debug.Print fso.GetExtensionName("MyFile.something.txt")

Drukuje txt Zauważ, że metoda GetExtensionName() już obsługuje wiele kropek w nazwie pliku.

Pobierz tylko ścieżkę ze ścieżki pliku

Metoda GetParentFolderName zwraca folder nadrzędny dla dowolnej ścieżki. Chociaż można tego również używać z folderami, jest to prawdopodobnie bardziej przydatne do wyodrębnienia ścieżki z bezwzględnej ścieżki pliku:

Dim fso As New Scripting.FileSystemObject
Debug.Print fso.GetParentFolderName("C:\Users\Me\My Documents\SomeFile.txt")

Drukuje C:\Users\Me\My Documents

Zauważ, że separator ścieżki końcowej nie jest zawarty w zwracanym ciągu.

Użycie FSO.BuildPath do zbudowania pełnej ścieżki ze ścieżki folderu i nazwy pliku

Jeśli akceptujesz dane wprowadzane przez użytkownika dla ścieżek folderów, może być konieczne sprawdzenie końcowych ukośników odwrotnych ( \ ) przed zbudowaniem ścieżki do pliku. Metoda FSO.BuildPath upraszcza to:

  Const sourceFilePath As String = "C:\Temp"  '<-- Without trailing backslash
  Const targetFilePath As String = "C:\Temp\" '<-- With trailing backslash

  Const fileName As String = "Results.txt"
  
  Dim FSO As FileSystemObject
  Set FSO = New FileSystemObject
  
  Debug.Print FSO.BuildPath(sourceFilePath, fileName)
  Debug.Print FSO.BuildPath(targetFilePath, fileName)

Wynik:

C:\Temp\Results.txt
C:\Temp\Results.txt


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow