Názorný postup: Zpracování souborů a adresářů v jazyce Visual Basic
Tento návod obsahuje úvod k základům vstupně-výstupních operací v Visual Basic.Popisuje, jak vytvořit malé aplikace, která obsahuje seznam a zkoumá textových souborů v adresáři.Pro každý vybraný text soubor aplikace obsahuje atributy souborů a první řádek obsahu.Existuje možnost zápisu do souboru protokolu.
Tento návod používá členy My.Computer.FileSystem Object, které jsou k dispozici v Visual Basic.Další informace naleznete v tématu FileSystem.Na konci návod je ekvivalentní například za předpokladu, který používá třídy z System.IO oboru názvů.
[!POZNÁMKA]
Ve vašem počítači se pro některé z prvků uživatelského rozhraní sady Visual Studio mohou zobrazit jiné názvy a umístění, než jsou uvedeny v následujících pokynech. Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením. Další informace naleznete v tématu Nastavení aplikace Visual Studio.
Jak vytvořit nový projekt
V nabídce Soubor klepněte na příkaz Nový Projekt.
Zobrazí se dialogové okno Nový projekt.
V Nainstalované šablony podokně rozbalte položku jazyka Visual Basica klepněte na tlačítko Windows.V šablony v prostřední, klepněte na podokno Aplikace model Windows Forms.
V název zadejte FileExplorer nastavit název projektu a klepněte na tlačítko OK.
Visual Studio přidá do projektu Průzkumník řešení a otevře designer pro model Windows Forms.
Přidejte ovládací prvky z následující tabulky do formuláře a nastavte odpovídající hodnoty jejich vlastnosti.
Ovládací prvek
Property
Value
ListBox
Název
filesListBox
Tlačítko
Název
Text
browseButton
Procházet
Tlačítko
Název
Text
examineButton
Examine
CheckBox
Název
Text
saveCheckBox
Uložit výsledky
FolderBrowserDialog
Název
FolderBrowserDialog1
Vyberte složku a seznam souborů ve složce
Vytvoření Click obslužnou rutinu události pro browseButton poklepáním na ovládací prvek ve formuláři.Otevře se editor kódu.
Přidejte následující kód Click obslužnou rutinu události.
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) End If
FolderBrowserDialog1.ShowDialog Volání otevře Vyhledat složku dialogové okno.Poté, co uživatel klepne na OK, SelectedPath vlastnost je odeslána jako argument ListFiles metodu, která je přidána v dalším kroku.
Přidejte následující ListFiles metoda.
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 seznam.
GetFiles Metoda poté načte kolekce řetězců, jeden pro každý soubor v adresáři.GetFiles Metoda přijímá argument pro vzorek hledání, načíst soubory, které odpovídají určitým způsobem.V tomto příkladu jsou vráceny pouze soubory s příponou TXT.
Řetězce, které jsou vráceny GetFiles metody jsou potom přidány do seznam.
Spusťte aplikaci.Klepněte procházení tlačítko.V Vyhledat složku dialogové okno, přejděte do složky, která obsahuje soubory s příponou TXT a pak vyberte složku a klepněte na OK.
ListBox Obsahuje seznam souborů TXT ve vybrané složce.
Zastavení, spuštění aplikace.
Získat atributy souboru a obsah z textového souboru
Vytvoření Click obslužnou rutinu události pro examineButton poklepáním na ovládací prvek ve formuláři.
Přidejte následující kód Click obslužnou rutinu události.
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ěří vybranou položku v ListBox.Poté získá položka cesty k souboru z ListBox.FileExists Metoda slouží ke kontrole, zda soubor stále existuje.
Cesta k souboru je odeslána jako argument GetTextForOutput metodu, 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í v MessageBox.
Přidejte následující GetTextForOutput metoda.
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á GetFileInfo metodou k získání souboru parametrů.Parametry souboru jsou přidány do StringBuilder.
OpenTextFileReader Metoda načte obsah souboru do StreamReader.První řádek obsahu získané z StreamReader a doplňuje StringBuilder.
Spusťte aplikaci.Klepněte na tlačítko procházenía vyhledejte složku, která obsahuje soubory s příponou TXT.Klikněte na tlačítko OK.
Vyberte soubor v ListBoxa klepněte na tlačítko Kontrola.A MessageBox zobrazuje informace o souboru.
Zastavení, spuštění aplikace.
Přidat položku protokolu
Přidejte následující kód na konec examineButton_Click obslužnou rutinu události.
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 pro soubor protokolu ve stejném adresáři jako vybraný soubor.Text položky protokolu nastavena na aktuální datum a čas následovaný informací o souboru.
WriteAllText Metoda, se append argument nastaven na hodnotu True, se používá k vytvoření položky protokolu.
Spusťte aplikaci.Vyhledejte textový soubor, vyberte jej v ListBox, vyberte Uložit výsledky políčko a klepněte na tlačítko Kontrola.Ověřte, že je položka protokolu zapsány do log.txt souboru.
Zastavení, spuštění aplikace.
Aktuální adresář
Vytvořte obslužnou rutinu událost pro Form1_Load poklepáním na formulář.
Přidejte následující kód do obslužné rutiny události.
' 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ář složka prohlížeče do aktuálního adresáře.
Spusťte aplikaci.Po klepnutí na tlačítko procházení poprvé, Vyhledat složku do aktuálního adresáře, otevře se dialogové okno.
Zastavení, spuštění aplikace.
Povolit ovládací prvky
Přidejte následující SetEnabled metoda.
Private Sub SetEnabled() Dim anySelected As Boolean = (filesListBox.SelectedItem IsNot Nothing) examineButton.Enabled = anySelected saveCheckBox.Enabled = anySelected End Sub
SetEnabled Metoda povoluje nebo zakazuje ovládacích prvků v závislosti na tom, zda je položka vybraná v ListBox.
Vytvoření SelectedIndexChanged obslužnou rutinu události pro filesListBox poklepáním ListBox ovládací prvek ve formuláři.
Přidat volání SetEnabled v nové filesListBox_SelectedIndexChanged obslužnou rutinu události.
Přidat volání SetEnabled na konci browseButton_Click obslužnou rutinu události.
Přidat volání SetEnabled na konci Form1_Load obslužnou rutinu události.
Spusťte aplikaci.Uložit výsledky políčko a Kontrola tlačítka jsou zakázány, pokud není vybrána položka v ListBox.
Celý příklad použití My.Computer.FileSystem
Následuje příklad úplné.
' 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
Celý příklad použití System.IO
Ekvivalentní následující příklad používá třídy z System.IO oboru názvů místo 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
Viz také
Úkoly
Názorný postup: Manipulace pomocí souborů.NET Framework metody (Visual Basic)