Procedura dettagliata: modifica di file mediante i metodi .NET Framework (Visual Basic)
Questa procedura dettagliata spiega come aprire e leggere un file usando la classe StreamReader, verificare se un file è accessibile, cercare una stringa all'interno di un file letto con un'istanza della classe StreamReader e scrivere in un file usando la classe StreamWriter.
Nota
I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
Creare l'applicazione
Avviare Visual Studio e iniziare il progetto creando un modulo che l'utente può usare per scrivere il file specificato.
Per creare il progetto
Scegliere Nuovo progetto dal menu File.
Nel riquadro Nuovo progetto fare clic su Applicazione Windows.
Nella casella Nome digitare
MyDiary
e fare clic su OK.Visual Studio aggiunge il progetto a Esplora soluzioni e viene aperto Progettazione Windows Form.
Aggiungere i controlli della tabella seguente al form e impostare i valori corrispondenti per le relative proprietà.
Oggetto | Proprietà | valore |
---|---|---|
Button | Nome Text |
Submit Invia voce |
Button | Nome Text |
Clear Cancella voce |
TextBox | Nome Text Multiline |
Entry Immettere un valore. False |
Scrivere nel file
Per aggiungere la possibilità di scrivere in un file tramite l'applicazione, usare la classe StreamWriter. La classe StreamWriter è progettata per l'output di caratteri in una codifica particolare, mentre la classe Stream è progettata per l'input e l'output di byte. Usare la classe StreamWriter per scrivere righe di informazioni in un file di testo standard. Per altre informazioni sulla classe StreamWriter, vedere StreamWriter.
Per aggiungere la funzionalità di scrittura
Scegliere Codice dal menu Visualizza per aprire l'editor di codice.
Poiché l'applicazione fa riferimento allo spazio dei nomi System.IO, aggiungere le istruzioni seguenti all'inizio del codice, prima della dichiarazione di classe per il form, che inizia con
Public Class Form1
.Imports System.IO
Prima di scrivere nel file è necessario creare un'istanza di una classe StreamWriter.
Scegliere Finestra di progettazione dal menu Visualizza per tornare a Progettazione Windows Form. Fare doppio clic sul pulsante
Submit
per creare un gestore eventi Click per il pulsante e quindi aggiungere il codice seguente.Dim fw As StreamWriter
Nota
L'ambiente di sviluppo integrato (IDE) di Visual Studio torna all'editor di codice e posiziona il punto di inserimento all'interno del gestore eventi in cui deve essere aggiunto il codice.
Per scrivere nel file, usare il metodo Write della classe StreamWriter. Aggiungere il codice seguente direttamente dopo
Dim fw As StreamWriter
. Non è necessario preoccuparsi del fatto che venga generata un'eccezione se il file non viene trovato, poiché verrà creato se non esiste già.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
Assicurarsi che l'utente non possa immettere uno spazio vuoto aggiungendo il codice seguente subito dopo
Dim ReadString As String
.If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then Entry.Text = "Please enter something." Return End If
Poiché si tratta di un diario, l'utente dovrà assegnare una data a ogni voce. Inserire il codice seguente dopo
fw = New StreamWriter("C:\MyDiary.txt", True)
per impostare la variabileToday
sulla data corrente.Dim Today As DateTime Today = Now fw.Write(CStr(Today)) fw.Write(ControlChars.CrLf)
Aggiungere infine il codice per cancellare TextBox. Aggiungere il codice seguente all'evento Click del pulsante
Clear
.Entry.Text = ""
Aggiungere funzionalità di visualizzazione al diario
In questa sezione si aggiunge una funzionalità che consente di visualizzare l'ultima voce dell'oggetto DisplayEntry
TextBox. È anche possibile aggiungere un oggetto ComboBox che visualizza le diverse voci e da cui un utente può selezionare una voce da visualizzare nell'oggetto DisplayEntry
TextBox. Un'istanza della classe StreamReader legge da MyDiary.txt
. Come la classe StreamWriter, la classe StreamReader deve essere usata con file di testo.
Per questa sezione della procedura, aggiungere i controlli della tabella seguente al form e impostare i valori corrispondenti per le relative proprietà.
Controllo | Proprietà | Valori |
---|---|---|
TextBox | Nome Visible Dimensione Multiline |
DisplayEntry False 120,60 True |
Button | Nome Text |
Display Schermo |
Button | Nome Text |
GetEntries Ottieni voci |
ComboBox | Nome Text Abilitato |
PickEntries Seleziona una voce False |
Per popolare la casella combinata
L'oggetto
PickEntries
ComboBox viene usato per visualizzare le date in cui un utente immette le diverse voci, in modo che l'utente possa selezionare una voce da una data specifica. Creare un gestore eventi Click per il pulsanteGetEntries
e aggiungervi il codice seguente.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
Per testare il codice, premere F5 per compilare l'applicazione e quindi fare clic su Ottieni voci. Fare clic sulla freccia giù nell'oggetto ComboBox per visualizzare le date delle voci.
Per scegliere e visualizzare le singole voci
Creare un gestore eventi Click per il pulsante
Display
e aggiungervi il codice seguente.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
Per testare il codice, premere F5 per compilare l'applicazione e quindi inviare una voce. Fare clic su Ottieni voci, selezionare una voce in ComboBox e quindi fare clic su Visualizza. Il contenuto della voce selezionata viene visualizzato nell'oggetto
DisplayEntry
TextBox.
Consentire agli utenti di eliminare o modificare le voci
Infine, è possibile includere funzionalità aggiuntive che consentono agli utenti di eliminare o modificare una voce usando i pulsanti DeleteEntry
e EditEntry
. Entrambi i pulsanti restano disabilitati a meno che non sia visualizzata una voce.
Aggiungere i controlli della tabella seguente al form e impostare i valori corrispondenti per le relative proprietà.
Controllo | Proprietà | Valori |
---|---|---|
Button | Nome Text Abilitato |
DeleteEntry Elimina voce False |
Button | Nome Text Abilitato |
EditEntry Modifica voce False |
Button | Nome Text Abilitato |
SubmitEdit Invia modifica False |
Per abilitare l'eliminazione e la modifica delle voci
Aggiungere il codice seguente all'evento Click del pulsante
Display
, dopoDisplayEntry.Text = ReadString
.DeleteEntry.enabled = True
Creare un gestore eventi Click per il pulsante
DeleteEntry
e aggiungervi il codice seguente.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
Quando un utente visualizza una voce, il pulsante
EditEntry
viene abilitato. Aggiungere il codice seguente all'evento Click del pulsanteDisplay
dopoDisplayEntry.Text = ReadString
.EditEntry.Enabled = True
Creare un gestore eventi Click per il pulsante
EditEntry
e aggiungervi il codice seguente.Entry.Text = DisplayEntry.Text SubmitEdit.Enabled = True
Creare un gestore eventi Click per il pulsante
SubmitEdit
e aggiungervi il codice seguenteDim 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
Per testare il codice, premere F5 per compilare l'applicazione. Fare clic su Ottieni voci, selezionare una voce e quindi fare clic su Visualizza. La voce viene visualizzata nell'oggetto DisplayEntry
TextBox. Fare clic su Modifica voce. La voce viene visualizzata nell'oggetto Entry
TextBox. Modificare la voce nell'oggetto Entry
TextBox e fare clic su Invia modifica. Aprire il file MyDiary.txt
per confermare la correzione. Ora selezionare una voce e fare clic su Elimina voce. Quando l'oggetto MessageBox chiede una conferma, fare clic su OK. Chiudere l'applicazione e aprire MyDiary.txt
per confermare l'eliminazione.