Genomgång: Manipulera filer med hjälp av .NET Framework-metoder (Visual Basic)
Den här genomgången visar hur du öppnar och läser en fil med hjälp av StreamReader klassen, kontrollerar om en fil används, söker efter en sträng i en fil som läss med en instans av klassen och skriver till en fil med hjälp StreamWriter av StreamReader klassen.
Kommentar
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 Anpassa IDE.
Skapa programmet
Starta Visual Studio och starta projektet genom att skapa ett formulär som användaren kan använda för att skriva till den avsedda filen.
Så här skapar du projektet
På menyn Arkiv väljer du Nytt projekt.
I fönstret Nytt projekt klickar du på Windows-program.
I rutan Namn skriver du
MyDiary
och klickar 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.
Objekt | Egenskaper | Värde |
---|---|---|
Button | Namn Text |
Submit Skicka post |
Button | Namn Text |
Clear Rensa post |
TextBox | Namn Text Multiline |
Entry Ange något. False |
Skriva till filen
Om du vill lägga till möjligheten att skriva till en fil via programmet använder du StreamWriter klassen . StreamWriter är utformad för teckenutdata i en viss kodning, medan Stream klassen är utformad för byteindata och utdata. Används StreamWriter för att skriva informationsrader till en standardtextfil. Mer information om klassen StreamWriterfinns i StreamWriter .
Lägga till skrivfunktioner
På menyn Visa väljer du Kod för att öppna kodredigeraren.
Eftersom programmet refererar till System.IO namnområdet lägger du till följande instruktioner i början av koden, före klassdeklarationen för formuläret, som börjar
Public Class Form1
.Imports System.IO
Innan du skriver till filen måste du skapa en instans av en StreamWriter klass.
På menyn Visa väljer du Designer för att återgå till Windows Forms Designer. Dubbelklicka på
Submit
knappen för att skapa en Click händelsehanterare för knappen och lägg sedan till följande kod.Dim fw As StreamWriter
Kommentar
Visual Studio Integrated Development Environment (IDE) återgår till kodredigeraren och placerar insättningspunkten i händelsehanteraren där du bör lägga till koden.
Om du vill skriva till filen använder du Write -metoden för StreamWriter klassen. Lägg till följande kod direkt efter
Dim fw As StreamWriter
. Du behöver inte oroa dig för att ett undantag utlöses om filen inte hittas, eftersom den skapas om den inte redan finns.Dim ReadString As String Try 'Pass the file path and name to the StreamWriter constructor. 'Indicate that Append is True, so file will not be overwritten. fw = New StreamWriter("C:\MyDiary.txt", True) ReadString = Entry.Text fw.WriteLine(ReadString) Finally 'Close the file. fw.Close() End Try
Kontrollera att användaren inte kan skicka en tom post genom att lägga till följande kod direkt efter
Dim ReadString As String
.If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then Entry.Text = "Please enter something." Return End If
Eftersom det här är en dagbok vill användaren tilldela ett datum till varje post. Infoga följande kod efter
fw = New StreamWriter("C:\MyDiary.txt", True)
för att ange variabelnToday
till aktuellt datum.Dim Today As DateTime Today = Now fw.Write(CStr(Today)) fw.Write(ControlChars.CrLf)
Slutligen bifogar du kod för att rensa TextBox. Lägg till följande kod i
Clear
knappens Click händelse.Entry.Text = ""
Lägga till visningsfunktioner i dagboken
I det här avsnittet lägger du till en funktion som visar den senaste posten i DisplayEntry
TextBox. Du kan också lägga till en ComboBox som visar olika poster och från vilken en användare kan välja en post som ska visas i DisplayEntry
TextBox. En instans av StreamReader klassen läser från MyDiary.txt
. Precis som StreamWriter klassen StreamReader är avsedd att användas med textfiler.
I det här avsnittet av genomgången lägger du till kontrollerna i följande tabell i formuläret och anger motsvarande värden för deras egenskaper.
Ctrl | Egenskaper | Värden |
---|---|---|
TextBox | Namn Synlig Storlek Multiline |
DisplayEntry False 120,60 True |
Button | Namn Text |
Display Skärm |
Button | Namn Text |
GetEntries Hämta poster |
ComboBox | Namn Text Aktiverad |
PickEntries Välj en post False |
Så här fyller du i kombinationsrutan
PickEntries
ComboBox Används för att visa de datum då en användare skickar varje post, så att användaren kan välja en post från ett visst datum. Skapa en Click händelsehanterare påGetEntries
knappen och lägg till följande kod.Dim fr As StreamReader = Nothing Dim FileString As String FileString = "" Try fr = New System.IO.StreamReader("C:\MyDiary.txt") PickEntries.Items.Clear() PickEntries.Enabled = True Do FileString = fr.ReadLine If IsDate(FileString) Then PickEntries.Items.Add(FileString) End If Loop Until (FileString Is Nothing) Finally If fr IsNot Nothing Then fr.Close() End If End Try PickEntries.Enabled = True
Testa koden genom att trycka på F5 för att kompilera programmet och klicka sedan på Hämta poster. Klicka på listrutepilen i för ComboBox att visa startdatumen.
Så här väljer du och visar enskilda poster
Skapa en Click händelsehanterare för
Display
knappen och lägg till följande kod.Dim fr As StreamReader Dim ReadString As String 'Make sure ReadString begins empty. ReadString = "" Dim FileString As String fr = New StreamReader("C:\MyDiary.txt") 'If no entry has been selected, show the whole file. If PickEntries.Enabled = False Or PickEntries.SelectedText Is Nothing Then Do 'Read a line from the file into FileString. FileString = fr.ReadLine 'add it to ReadString ReadString = ReadString & ControlChars.CrLf & FileString Loop Until (FileString = Nothing) Else 'An entry has been selected, find the line that matches. Do FileString = fr.ReadLine Loop Until FileString = CStr(PickEntries.SelectedItem) FileString = CStr(PickEntries.SelectedItem) & ControlChars.CrLf ReadString = FileString & fr.ReadLine 'Read from the file until EOF or another Date is found. Do Until ((fr.Peek < 0) Or (IsDate(fr.ReadLine))) ReadString = ReadString & fr.ReadLine Loop End If fr.Close() DisplayEntry.Visible = True DisplayEntry.Text = ReadString
Testa koden genom att trycka på F5 för att kompilera programmet och sedan skicka en post. Klicka på Hämta poster, välj en post från ComboBoxoch klicka sedan på Visa. Innehållet i den markerade posten visas i
DisplayEntry
TextBox.
Aktivera användare att ta bort eller ändra poster
Slutligen kan du inkludera ytterligare funktioner som gör det möjligt för användare att ta bort eller ändra en post med hjälp DeleteEntry
av och EditEntry
knappar. Båda knapparna förblir inaktiverade om inte en post visas.
Lägg till kontrollerna i följande tabell i formuläret och ange motsvarande värden för deras egenskaper.
Ctrl | Egenskaper | Värden |
---|---|---|
Button | Namn Text Aktiverad |
DeleteEntry Ta bort post False |
Button | Namn Text Aktiverad |
EditEntry Redigera post False |
Button | Namn Text Aktiverad |
SubmitEdit Skicka redigera False |
Så här aktiverar du borttagning och ändring av poster
Lägg till följande kod i
Display
knappens Click händelse, efterDisplayEntry.Text = ReadString
.DeleteEntry.enabled = True
Skapa en Click händelsehanterare för
DeleteEntry
knappen och lägg till följande kod.Dim fr As StreamReader Dim ReadString As String Dim WriteString As String Dim ConfirmDelete As MsgBoxResult fr = New StreamReader("C:\MyDiary.txt") ReadString = fr.ReadLine ' Read through the textfile Do Until (fr.Peek < 0) ReadString = ReadString & vbCrLf & fr.ReadLine Loop WriteString = Replace(ReadString, DisplayEntry.Text, "") fr.Close() ' Check to make sure the user wishes to delete the entry ConfirmDelete = MsgBox("Do you really wish to delete this entry?", MsgBoxStyle.OKCancel) If ConfirmDelete = MsgBoxResult.OK Then File.Delete("C:\MyDiary.txt") Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt") fw.WriteLine(WriteString) fw.Close() ' Reset controls on the form DisplayEntry.Text = "" PickEntries.Text = "" PickEntries.Items.Clear() PickEntries.Enabled = False DeleteEntry.Enabled = False End If
När en användare visar en post aktiveras
EditEntry
knappen. Lägg till följande kod i Click händelsen förDisplay
knappen efterDisplayEntry.Text = ReadString
.EditEntry.Enabled = True
Skapa en Click händelsehanterare för
EditEntry
knappen och lägg till följande kod.Entry.Text = DisplayEntry.Text SubmitEdit.Enabled = True
Skapa en Click händelsehanterare för
SubmitEdit
knappen och lägg till följande kodDim fr As StreamReader Dim ReadString As String Dim WriteString As String If Entry.Text = "" Then MsgBox("Use Delete to Delete an Entry") Return End If fr = New StreamReader("C:\MyDiary.txt") ReadString = fr.ReadLine Do Until (fr.Peek < 0) ReadString = ReadString & vbCrLf & fr.ReadLine Loop WriteString = Replace(ReadString, DisplayEntry.Text, Entry.Text) fr.Close() File.Delete("C:\MyDiary.txt") Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt") fw.WriteLine(WriteString) fw.Close() DisplayEntry.Text = Entry.Text Entry.Text = "" EditEntry.Enabled = False SubmitEdit.Enabled = False
Testa koden genom att trycka på F5 för att kompilera programmet. Klicka på Hämta poster, välj en post och klicka sedan på Visa. Posten visas i DisplayEntry
TextBox. Klicka på Redigera post. Posten visas i Entry
TextBox. Redigera posten i Entry
TextBox och klicka på Skicka redigera. Öppna filen för att bekräfta korrigeringen MyDiary.txt
. Välj en post och klicka på Ta bort post. När begäranden MessageBox bekräftas klickar du på OK. Stäng programmet och öppna MyDiary.txt
för att bekräfta borttagningen.