Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här genomgången ger en introduktion till grunderna för fil-I/O i Visual Basic. Den beskriver hur du skapar ett litet program som visar och undersöker textfiler i en katalog. För varje markerad textfil innehåller programmet filattribut och den första innehållsraden. Det finns ett alternativ för att skriva information till en loggfil.
I den här genomgången används medlemmar i My.Computer.FileSystem Object, som finns tillgängliga i Visual Basic. Mer information finns i FileSystem. I slutet av genomgången tillhandahålls ett motsvarande exempel som använder klasser från System.IO namnområdet.
Anmärkning
Datorn kan visa olika namn eller platser för vissa av Visual Studio-användargränssnittselementen i följande instruktioner. Den Visual Studio-utgåva som du har och de inställningar som du använder avgör dessa element. Mer information finns i Anpassning av utvecklingsmiljön.
Så här skapar du projektet
På menyn Arkiv klickar du på Nytt projekt.
Dialogrutan Nytt projekt visas.
I fönstret Installerade mallar expanderar du Visual Basic och klickar sedan på Windows. I fönstret Mallar i mitten klickar du på Windows Forms-program.
I rutan Namn skriver du
FileExplorerför att ange projektnamnet och klickar sedan på OK.Visual Studio lägger till projektet i Solution Explorer och Windows Forms Designer öppnas.
Lägg till kontrollerna i följande tabell i formuläret och ange motsvarande värden för deras egenskaper.
Kontroll Fastighet Värde Listruta Namn filesListBoxknapp Namn
SMSbrowseButton
Bläddraknapp Namn
SMSexamineButton
UndersökaKryssruta Namn
SMSsaveCheckBox
Spara resultatFolderBrowserDialog Namn FolderBrowserDialog1
Så här väljer du en mapp och listar filer i en mapp
Skapa en
Clickhändelsehanterare förbrowseButtongenom att dubbelklicka på kontrollen i formuläret. Kodredigeraren öppnas.Lägg till följande kod i händelsehanteraren för
Click.If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) End IfAnropet
FolderBrowserDialog1.ShowDialogöppnar dialogrutan Bläddra efter mapp . När användaren klickar på OKSelectedPath skickas egenskapen som ett argument till metoden, som läggs tillListFilesi nästa steg.Lägg till följande
ListFilesmetod.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 SubDen här koden rensar först ListBox.
Metoden GetFiles hämtar sedan en samling strängar, en för varje fil i katalogen. Metoden
GetFilesaccepterar ett sökmönsterargument för att hämta filer som matchar ett visst mönster. I det här exemplet returneras endast filer som har tillägget .txt.Strängarna som returneras av
GetFilesmetoden läggs sedan till i ListBox.Kör programmet. Klicka på knappen Bläddra. I dialogrutan Bläddra efter mapp bläddrar du till en mapp som innehåller .txt filer och väljer sedan mappen och klickar på OK.
ListBoxinnehåller en lista över .txt filer i den valda mappen.Sluta köra programmet.
Hämta attribut för en fil och innehåll från en textfil
Skapa en
Clickhändelsehanterare förexamineButtongenom att dubbelklicka på kontrollen i formuläret.Lägg till följande kod i händelsehanteraren för
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)Koden verifierar att ett objekt är markerat i
ListBox. Den hämtar sedan filsökvägsposten frånListBox. Metoden FileExists används för att kontrollera om filen fortfarande finns.Filsökvägen skickas som ett argument till
GetTextForOutput-metoden, som läggs till i nästa steg. Den här metoden returnerar en sträng som innehåller filinformation. Filinformationen visas i en MessageBox.Lägg till följande
GetTextForOutputmetod.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 FunctionKoden använder GetFileInfo metoden för att hämta filparametrar. Filparametrarna läggs till i en StringBuilder.
Metoden OpenTextFileReader läser in filinnehållet i en StreamReader. Den första innehållsraden hämtas från
StreamReaderoch läggs till iStringBuilder.Kör programmet. Klicka på Bläddra och bläddra till en mapp som innehåller .txt filer. Klicka på OK.
Välj en fil i
ListBoxoch klicka sedan på Undersök. AMessageBoxvisar filinformationen.Sluta köra programmet.
Så här lägger du till en loggpost
Lägg till följande kod i slutet av
examineButton_Clickhändelsehanteraren.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 IfKoden anger loggfilsökvägen för att placera loggfilen i samma katalog som den valda filens. Texten i loggposten anges till aktuellt datum och tid följt av filinformationen.
Metoden WriteAllText , med
appendargumentet inställt påTrue, används för att skapa loggposten.Kör programmet. Bläddra till en textfil, markera den i kryssrutan
ListBox, markera kryssrutan Spara resultat och klicka sedan på Undersök. Kontrollera att loggposten är skriven tilllog.txtfilen.Sluta köra programmet.
Så här använder du den aktuella katalogen
Skapa en händelsehanterare för
Form1_Loadgenom att dubbelklicka på formuläret.Lägg till följande kod i händelsehanteraren.
' Set the default directory of the folder browser to the current directory. FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectoryDen här koden anger standardkatalogen för mappwebbläsaren till den aktuella katalogen.
Kör programmet. När du klickar på Bläddra första gången öppnas dialogrutan Bläddra efter mapp till den aktuella katalogen.
Sluta köra programmet.
Så här aktiverar du kontroller selektivt
Lägg till följande
SetEnabledmetod.Private Sub SetEnabled() Dim anySelected As Boolean = (filesListBox.SelectedItem IsNot Nothing) examineButton.Enabled = anySelected saveCheckBox.Enabled = anySelected End SubMetoden
SetEnabledaktiverar eller inaktiverar kontroller beroende på om ett objekt har valts iListBox.Skapa en
SelectedIndexChangedhändelsehanterare förfilesListBoxgenom att dubbelklickaListBoxpå kontrollen i formuläret.Lägg till ett anrop till
SetEnabledi den nyafilesListBox_SelectedIndexChangedhändelsehanteraren.Lägg till ett anrop till
SetEnabledi slutet avbrowseButton_Clickhändelsehanteraren.Lägg till ett anrop till
SetEnabledi slutet avForm1_Loadhändelsehanteraren.Kör programmet. Kryssrutan Spara resultat och knappen Undersök inaktiveras om ett objekt inte är markerat i
ListBox.
Fullständigt exempel med My.Computer.FileSystem
Följande är det fullständiga exemplet.
' 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
Fullständigt exempel med System.IO
I följande motsvarande exempel används klasser från System.IO namnområdet i stället för att använda 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