Návod: Práce se soubory a adresáři v jazyce Visual Basic
Tento návod obsahuje úvod k základům vstupně-výstupních operací souborů v jazyce Visual Basic. Popisuje, jak vytvořit malou aplikaci, která vypíše a prozkoumá textové soubory v adresáři. Pro každý vybraný textový soubor aplikace poskytuje atributy souboru a první řádek obsahu. K dispozici je možnost zápisu informací do souboru protokolu.
Tento návod používá členy My.Computer.FileSystem Object
, které jsou k dispozici v jazyce Visual Basic. Další informace naleznete v tématu FileSystem. Na konci návodu je k dispozici ekvivalentní příklad, který používá třídy z System.IO oboru názvů.
Poznámka:
Váš počítač může v následujících pokynech zobrazovat odlišné názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení integrovaného vývojového prostředí.
Vytvoření projektu
V nabídce Soubor klepněte na tlačítko Nový projekt.
Zobrazí se dialogové okno Nový projekt.
V podokně Nainstalované šablony rozbalte položku Visual Basic a klepněte na tlačítko Windows. V podokně Šablony uprostřed klikněte na model Windows Forms Aplikace.
Do pole Název zadejte
FileExplorer
název projektu a klepněte na tlačítko OK.Visual Studio přidá projekt do Průzkumník řešení a otevře se návrhář model Windows Forms.
Přidejte ovládací prvky v následující tabulce do formuláře a nastavte odpovídající hodnoty pro jejich vlastnosti.
Control Vlastnost Hodnota ListBox Název filesListBox
Tlačítko Název
TextbrowseButton
ProcházetTlačítko Název
TextexamineButton
ZkoumatCheckBox Název
TextsaveCheckBox
Uložit výsledkyFolderBrowserDialog Název FolderBrowserDialog1
Výběr složky a výpis souborů ve složce
Vytvořte obslužnou rutinu
Click
události takbrowseButton
, že dvakrát kliknete na ovládací prvek ve formuláři. Otevře se Editor kódu.Do obslužné rutiny
Click
události přidejte následující kód.If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) End If
Hovor
FolderBrowserDialog1.ShowDialog
otevře dialogové okno Procházet složku . Jakmile uživatel klikne na OK, SelectedPath vlastnost se odešle jako argument metoděListFiles
, která je přidána v dalším kroku.Přidejte následující
ListFiles
metodu.Private Sub ListFiles(ByVal folderPath As String) filesListBox.Items.Clear() Dim fileNames = My.Computer.FileSystem.GetFiles( folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt") For Each fileName As String In fileNames filesListBox.Items.Add(fileName) Next End Sub
Tento kód nejprve vymaže ListBox.
Metoda GetFiles pak načte kolekci řetězců, jednu pro každý soubor v adresáři. Metoda
GetFiles
přijímá argument vzoru vyhledávání pro načtení souborů, které odpovídají určitému vzoru. V tomto příkladu se vrátí pouze soubory, které mají příponu .txt.Řetězce vrácené metodou
GetFiles
se pak přidají do ListBoxu.Aplikaci spusťte. Klikněte na tlačítko Procházet . V dialogovém okně Procházet složku přejděte do složky, která obsahuje .txt soubory, a vyberte složku a klikněte na tlačítko OK.
Obsahuje
ListBox
seznam .txt souborů ve vybrané složce.Ukončete spuštění aplikace.
Získání atributů souboru a obsahu z textového souboru
Vytvořte obslužnou rutinu
Click
události takexamineButton
, že dvakrát kliknete na ovládací prvek ve formuláři.Do obslužné rutiny
Click
události přidejte následující kód.If filesListBox.SelectedItem Is Nothing Then MessageBox.Show("Please select a file.") Exit Sub End If ' Obtain the file path from the list box selection. Dim filePath = filesListBox.SelectedItem.ToString ' Verify that the file was not removed since the ' Browse button was clicked. If My.Computer.FileSystem.FileExists(filePath) = False Then MessageBox.Show("File Not Found: " & filePath) Exit Sub End If ' Obtain file information in a string. Dim fileInfoText As String = GetTextForOutput(filePath) ' Show the file information. MessageBox.Show(fileInfoText)
Kód ověří, zda je položka vybrána v souboru
ListBox
. Potom získá položku cesty k souboru z objektuListBox
. Metoda FileExists slouží ke kontrole, zda soubor stále existuje.Cesta k souboru se odešle jako argument metodě
GetTextForOutput
, která je přidána v dalším kroku. Tato metoda vrátí řetězec, který obsahuje informace o souboru. Informace o souboru se zobrazí ve složce MessageBox.Přidejte následující
GetTextForOutput
metodu.Private Function GetTextForOutput(ByVal filePath As String) As String ' Verify that the file exists. If My.Computer.FileSystem.FileExists(filePath) = False Then Throw New Exception("File Not Found: " & filePath) End If ' Create a new StringBuilder, which is used ' to efficiently build strings. Dim sb As New System.Text.StringBuilder() ' Obtain file information. Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath) ' Add file attributes. sb.Append("File: " & thisFile.FullName) sb.Append(vbCrLf) sb.Append("Modified: " & thisFile.LastWriteTime.ToString) sb.Append(vbCrLf) sb.Append("Size: " & thisFile.Length.ToString & " bytes") sb.Append(vbCrLf) ' Open the text file. Dim sr As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(filePath) ' Add the first line from the file. If sr.Peek() >= 0 Then sb.Append("First Line: " & sr.ReadLine()) End If sr.Close() Return sb.ToString End Function
Kód používá metodu GetFileInfo k získání parametrů souboru. Parametry souboru se přidají do souboru StringBuilder.
Metoda OpenTextFileReader načte obsah souboru do souboru StreamReader. První řádek obsahu je získán z
StreamReader
a je přidán doStringBuilder
.Aplikaci spusťte. Klikněte na Procházet a přejděte do složky, která obsahuje .txt soubory. Klikněte na OK.
Vyberte soubor v nástroji
ListBox
a klepněte na tlačítko Prozkoumat. ZobrazíMessageBox
informace o souboru.Ukončete spuštění aplikace.
Přidání položky protokolu
Na konec
examineButton_Click
obslužné rutiny události přidejte následující kód.If saveCheckBox.Checked = True Then ' Place the log file in the same folder as the examined file. Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt") Dim logText As String = "Logged: " & Date.Now.ToString & vbCrLf & fileInfoText & vbCrLf & vbCrLf ' Append text to the log file. My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True) End If
Kód nastaví cestu k souboru protokolu tak, aby se soubor protokolu umístil do stejného adresáře jako u vybraného souboru. Text položky protokolu je nastavený na aktuální datum a čas následovaný informacemi o souboru.
Metoda WriteAllText s argumentem nastaveným
append
naTrue
, se používá k vytvoření položky protokolu.Aplikaci spusťte. Přejděte k textovému souboru, vyberte ho v
ListBox
seznamu , zaškrtněte políčko Uložit výsledky a klikněte na tlačítko Prozkoumat. Ověřte, že je položka protokolu zapsánalog.txt
do souboru.Ukončete spuštění aplikace.
Použití aktuálního adresáře
Poklikáním na formulář vytvořte obslužnou rutinu
Form1_Load
události.Do obslužné rutiny události přidejte následující kód.
' Set the default directory of the folder browser to the current directory. FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory
Tento kód nastaví výchozí adresář prohlížeče složek na aktuální adresář.
Aplikaci spusťte. Když poprvé kliknete na Procházet , otevře se dialogové okno Procházet složku v aktuálním adresáři.
Ukončete spuštění aplikace.
Selektivní povolení ovládacích prvků
Přidejte následující
SetEnabled
metodu.Private Sub SetEnabled() Dim anySelected As Boolean = (filesListBox.SelectedItem IsNot Nothing) examineButton.Enabled = anySelected saveCheckBox.Enabled = anySelected End Sub
Metoda
SetEnabled
povolí nebo zakáže ovládací prvky v závislosti na tom, zda je položka vybrána v souboruListBox
.Vytvořte obslužnou rutinu
SelectedIndexChanged
události takfilesListBox
, že dvakrát kliknete naListBox
ovládací prvek ve formuláři.Přidejte volání do
SetEnabled
novéfilesListBox_SelectedIndexChanged
obslužné rutiny události.Na konec obslužné rutiny
browseButton_Click
události přidejte voláníSetEnabled
.Na konec obslužné rutiny
Form1_Load
události přidejte voláníSetEnabled
.Aplikaci spusťte. Zaškrtávací políčko Uložit výsledky a tlačítko Prozkoumat jsou zakázány, pokud položka není vybrána v okně
ListBox
.
Úplný příklad s použitím my.Computer.FileSystem
Následuje úplný příklad.
' This example uses members of the My.Computer.FileSystem
' object, which are available in Visual Basic.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Set the default directory of the folder browser to the current directory.
FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory
SetEnabled()
End Sub
Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
' List files in the folder.
ListFiles(FolderBrowserDialog1.SelectedPath)
End If
SetEnabled()
End Sub
Private Sub ListFiles(ByVal folderPath As String)
filesListBox.Items.Clear()
Dim fileNames = My.Computer.FileSystem.GetFiles(
folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt")
For Each fileName As String In fileNames
filesListBox.Items.Add(fileName)
Next
End Sub
Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click
If filesListBox.SelectedItem Is Nothing Then
MessageBox.Show("Please select a file.")
Exit Sub
End If
' Obtain the file path from the list box selection.
Dim filePath = filesListBox.SelectedItem.ToString
' Verify that the file was not removed since the
' Browse button was clicked.
If My.Computer.FileSystem.FileExists(filePath) = False Then
MessageBox.Show("File Not Found: " & filePath)
Exit Sub
End If
' Obtain file information in a string.
Dim fileInfoText As String = GetTextForOutput(filePath)
' Show the file information.
MessageBox.Show(fileInfoText)
If saveCheckBox.Checked = True Then
' Place the log file in the same folder as the examined file.
Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName
Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt")
Dim logText As String = "Logged: " & Date.Now.ToString &
vbCrLf & fileInfoText & vbCrLf & vbCrLf
' Append text to the log file.
My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True)
End If
End Sub
Private Function GetTextForOutput(ByVal filePath As String) As String
' Verify that the file exists.
If My.Computer.FileSystem.FileExists(filePath) = False Then
Throw New Exception("File Not Found: " & filePath)
End If
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder()
' Obtain file information.
Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath)
' Add file attributes.
sb.Append("File: " & thisFile.FullName)
sb.Append(vbCrLf)
sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
sb.Append(vbCrLf)
sb.Append("Size: " & thisFile.Length.ToString & " bytes")
sb.Append(vbCrLf)
' Open the text file.
Dim sr As System.IO.StreamReader =
My.Computer.FileSystem.OpenTextFileReader(filePath)
' Add the first line from the file.
If sr.Peek() >= 0 Then
sb.Append("First Line: " & sr.ReadLine())
End If
sr.Close()
Return sb.ToString
End Function
Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged
SetEnabled()
End Sub
Private Sub SetEnabled()
Dim anySelected As Boolean =
(filesListBox.SelectedItem IsNot Nothing)
examineButton.Enabled = anySelected
saveCheckBox.Enabled = anySelected
End Sub
Úplný příklad použití System.IO
Následující ekvivalentní příklad používá třídy z System.IO oboru názvů místo použití My.Computer.FileSystem
objektů.
' This example uses classes from the System.IO namespace.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Set the default directory of the folder browser to the current directory.
FolderBrowserDialog1.SelectedPath =
System.IO.Directory.GetCurrentDirectory()
SetEnabled()
End Sub
Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
' List files in the folder.
ListFiles(FolderBrowserDialog1.SelectedPath)
SetEnabled()
End If
End Sub
Private Sub ListFiles(ByVal folderPath As String)
filesListBox.Items.Clear()
Dim fileNames As String() =
System.IO.Directory.GetFiles(folderPath,
"*.txt", System.IO.SearchOption.TopDirectoryOnly)
For Each fileName As String In fileNames
filesListBox.Items.Add(fileName)
Next
End Sub
Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click
If filesListBox.SelectedItem Is Nothing Then
MessageBox.Show("Please select a file.")
Exit Sub
End If
' Obtain the file path from the list box selection.
Dim filePath = filesListBox.SelectedItem.ToString
' Verify that the file was not removed since the
' Browse button was clicked.
If System.IO.File.Exists(filePath) = False Then
MessageBox.Show("File Not Found: " & filePath)
Exit Sub
End If
' Obtain file information in a string.
Dim fileInfoText As String = GetTextForOutput(filePath)
' Show the file information.
MessageBox.Show(fileInfoText)
If saveCheckBox.Checked = True Then
' Place the log file in the same folder as the examined file.
Dim logFolder As String =
System.IO.Path.GetDirectoryName(filePath)
Dim logFilePath = System.IO.Path.Combine(logFolder, "log.txt")
' Append text to the log file.
Dim logText As String = "Logged: " & Date.Now.ToString &
vbCrLf & fileInfoText & vbCrLf & vbCrLf
System.IO.File.AppendAllText(logFilePath, logText)
End If
End Sub
Private Function GetTextForOutput(ByVal filePath As String) As String
' Verify that the file exists.
If System.IO.File.Exists(filePath) = False Then
Throw New Exception("File Not Found: " & filePath)
End If
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder()
' Obtain file information.
Dim thisFile As New System.IO.FileInfo(filePath)
' Add file attributes.
sb.Append("File: " & thisFile.FullName)
sb.Append(vbCrLf)
sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
sb.Append(vbCrLf)
sb.Append("Size: " & thisFile.Length.ToString & " bytes")
sb.Append(vbCrLf)
' Open the text file.
Dim sr As System.IO.StreamReader =
System.IO.File.OpenText(filePath)
' Add the first line from the file.
If sr.Peek() >= 0 Then
sb.Append("First Line: " & sr.ReadLine())
End If
sr.Close()
Return sb.ToString
End Function
Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged
SetEnabled()
End Sub
Private Sub SetEnabled()
Dim anySelected As Boolean =
(filesListBox.SelectedItem IsNot Nothing)
examineButton.Enabled = anySelected
saveCheckBox.Enabled = anySelected
End Sub