Overzicht: Bestanden en mappen bewerken in Visual Basic
Deze procedure biedt een inleiding tot de basisprincipes van bestands-I/O in Visual Basic. Hierin wordt beschreven hoe u een kleine toepassing maakt waarin tekstbestanden in een map worden vermeld en onderzocht. Voor elk geselecteerd tekstbestand biedt de toepassing bestandskenmerken en de eerste regel inhoud. Er is een optie om informatie naar een logboekbestand te schrijven.
In dit scenario worden leden van de My.Computer.FileSystem Object
, die beschikbaar zijn in Visual Basic, gebruikt. Zie FileSystem voor meer informatie. Aan het einde van het scenario wordt een gelijkwaardig voorbeeld gegeven waarin klassen uit de System.IO naamruimte worden gebruikt.
Notitie
Mogelijk worden op uw computer verschillende namen of locaties weergegeven voor sommige elementen van de Visual Studio-gebruikersinterface in de volgende instructies. De Visual Studio-editie die u hebt en de instellingen die u gebruikt, bepalen deze elementen. Zie Personalizing the IDE (Personalizing the IDE) voor meer informatie.
Het project maken
Klik in het menu Bestand op Nieuw project.
Het dialoogvenster Nieuw project wordt weergegeven.
Vouw Visual Basic uit in het deelvenster Geïnstalleerde sjablonen en klik vervolgens op Windows. Klik in het deelvenster Sjablonen in het midden op Windows Forms-toepassing.
Typ in het vak Naam om de projectnaam in te stellen en klik op OK.
FileExplorer
Visual Studio voegt het project toe aan Solution Explorer en de Windows Forms Designer wordt geopend.
Voeg de besturingselementen in de volgende tabel toe aan het formulier en stel de bijbehorende waarden voor hun eigenschappen in.
Besturingselement Eigenschappen Weergegeven als Listbox Naam filesListBox
Knop Naam
TextbrowseButton
BladerenKnop Naam
TextexamineButton
OnderzoekenSelectievakje Naam
TextsaveCheckBox
Resultaten opslaanFolderBrowserDialog Naam FolderBrowserDialog1
Een map selecteren en bestanden in een map weergeven
Maak een
Click
gebeurtenis-handler voorbrowseButton
door te dubbelklikken op het besturingselement in het formulier. De Code-editor wordt geopend.Voeg de volgende code toe aan de
Click
gebeurtenis-handler.If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) End If
Het
FolderBrowserDialog1.ShowDialog
dialoogvenster Zoeken naar map wordt geopend. Nadat de gebruiker op OK heeft geklikt, wordt de SelectedPath eigenschap verzonden als een argument naar deListFiles
methode, die in de volgende stap wordt toegevoegd.Voeg de volgende
ListFiles
methode toe.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
Met deze code wordt eerst de keuzelijst gewist.
De GetFiles methode haalt vervolgens een verzameling tekenreeksen op, één voor elk bestand in de map. De
GetFiles
methode accepteert een zoekpatroonargument om bestanden op te halen die overeenkomen met een bepaald patroon. In dit voorbeeld worden alleen bestanden met de extensie .txt geretourneerd.De tekenreeksen die door de
GetFiles
methode worden geretourneerd, worden vervolgens toegevoegd aan de keuzelijst.Voer de toepassing uit. Klik op de knop Bladeren . Blader in het dialoogvenster Map zoeken naar een map met .txt bestanden en selecteer de map en klik op OK.
De
ListBox
lijst bevat een lijst met .txt bestanden in de geselecteerde map.Stop met het uitvoeren van de toepassing.
Kenmerken van een bestand en inhoud ophalen uit een tekstbestand
Maak een
Click
gebeurtenis-handler voorexamineButton
door te dubbelklikken op het besturingselement in het formulier.Voeg de volgende code toe aan de
Click
gebeurtenis-handler.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)
De code controleert of een item is geselecteerd in de
ListBox
. Vervolgens wordt de vermelding van het bestandspad opgehaald uit deListBox
. De FileExists methode wordt gebruikt om te controleren of het bestand nog bestaat.Het bestandspad wordt als argument verzonden naar de
GetTextForOutput
methode, die in de volgende stap wordt toegevoegd. Deze methode retourneert een tekenreeks die bestandsgegevens bevat. De bestandsgegevens worden weergegeven in een Berichtenvak.Voeg de volgende
GetTextForOutput
methode toe.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
De code gebruikt de GetFileInfo methode om bestandsparameters te verkrijgen. De bestandsparameters worden toegevoegd aan een StringBuilder.
De OpenTextFileReader methode leest de bestandsinhoud in een StreamReader. De eerste regel van de inhoud wordt verkregen van de
StreamReader
en wordt toegevoegd aan deStringBuilder
.Voer de toepassing uit. Klik op Bladeren en blader naar een map met .txt bestanden. Klik op OK.
Selecteer een bestand in de
ListBox
map en klik vervolgens op Onderzoeken. AMessageBox
geeft de bestandsgegevens weer.Stop met het uitvoeren van de toepassing.
Een logboekvermelding toevoegen
Voeg de volgende code toe aan het einde van de
examineButton_Click
gebeurtenis-handler.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
Met de code wordt het pad naar het logboekbestand ingesteld om het logboekbestand in dezelfde map te plaatsen als het geselecteerde bestand. De tekst van de logboekvermelding is ingesteld op de huidige datum en tijd, gevolgd door de bestandsgegevens.
De WriteAllText methode, waarbij het
append
argument is ingesteld opTrue
, wordt gebruikt om de logboekvermelding te maken.Voer de toepassing uit. Blader naar een tekstbestand, selecteer het in de
ListBox
, schakel het selectievakje Resultaten opslaan in en klik op Onderzoeken. Controleer of de logboekvermelding naar hetlog.txt
bestand is geschreven.Stop met het uitvoeren van de toepassing.
De huidige map gebruiken
Maak een gebeurtenis-handler voor
Form1_Load
door te dubbelklikken op het formulier.Voeg de volgende code toe aan de gebeurtenis-handler.
' Set the default directory of the folder browser to the current directory. FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory
Met deze code wordt de standaardmap van de mapbrowser ingesteld op de huidige map.
Voer de toepassing uit. Wanneer u de eerste keer op Bladeren klikt, wordt het dialoogvenster Bladeren naar map geopend in de huidige map.
Stop met het uitvoeren van de toepassing.
Besturingselementen selectief inschakelen
Voeg de volgende
SetEnabled
methode toe.Private Sub SetEnabled() Dim anySelected As Boolean = (filesListBox.SelectedItem IsNot Nothing) examineButton.Enabled = anySelected saveCheckBox.Enabled = anySelected End Sub
Met de
SetEnabled
methode worden besturingselementen ingeschakeld of uitgeschakeld, afhankelijk van of een item is geselecteerd in deListBox
.Maak een
SelectedIndexChanged
gebeurtenis-handler voorfilesListBox
door te dubbelklikken op hetListBox
besturingselement in het formulier.Voeg een aanroep toe aan
SetEnabled
de nieuwefilesListBox_SelectedIndexChanged
gebeurtenis-handler.Voeg een aanroep toe aan
SetEnabled
het einde van debrowseButton_Click
gebeurtenis-handler.Voeg een aanroep toe aan
SetEnabled
het einde van deForm1_Load
gebeurtenis-handler.Voer de toepassing uit. Het selectievakje Resultaten opslaan en de knop Onderzoeken zijn uitgeschakeld als een item niet is geselecteerd in het
ListBox
item.
Volledig voorbeeld met My.Computer.FileSystem
Hieronder volgt het volledige voorbeeld.
' 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
Volledig voorbeeld met behulp van System.IO
In het volgende equivalente voorbeeld worden klassen uit de System.IO naamruimte gebruikt in plaats van objecten te gebruiken My.Computer.FileSystem
.
' 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