VBA
Scripting.FileSystemObject
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