Procedura dettagliata: modifica di file mediante i metodi .NET Framework (Visual Basic)
In questa procedura dettagliata viene illustrato come aprire e leggere un file mediante la classe StreamReader, verificare se altri utenti accedono al file, cercare una stringa nel corso della lettura di un file tramite un'istanza della classe StreamReader e scrivere in un file mediante la classe StreamWriter.
Nota
Nomi o 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 delle impostazioni di sviluppo in Visual Studio.
Creazione dell'applicazione
Avviare Visual Studio e iniziare il progetto creando un form che consenta agli utenti di scrivere nel file designato.
Per creare il progetto
Scegliere Nuovo progetto dal menu File.
Nel riquadro Nuovo progetto scegliere Applicazione Windows.
Nella casella Nome digitare MyDiary, quindi scegliere OK.
Visual Studio aggiungerà il progetto a Esplora soluzioni e verrà aperto Progettazione Windows Form.
Aggiungere al form i controlli riportati nella tabella che segue e impostare i valori corrispondenti per le relative proprietà.
Object |
Proprietà |
Valore |
Nome Text |
Submit Submit Entry |
|
Nome Text |
Clear Clear Entry |
|
Nome Text Multiline |
Voce Please enter something. False |
Scrittura nel file
Per aggiungere la possibilità di scrivere in un file tramite l'applicazione, utilizzare la classe StreamWriter. StreamWriter è progettato per l'output di caratteri con una codifica particolare, mentre la classe Stream è progettata per l'input e l'output di byte. Utilizzare StreamWriter per scrivere righe di informazioni in un file di testo standard. Per ulteriori 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 riportate di seguito all'inizio del codice, prima della dichiarazione di classe per il form, che inizia con Public Class Form1.
Imports System Imports System.IO
Prima di scrivere nel file, è necessario creare un'istanza della classe StreamWriter.
Scegliere Progettazione dal menu Visualizza per ritornare a Progettazione Windows Form. Fare doppio clic sul pulsante Submit per creare un gestore eventi Click per il pulsante, quindi aggiungere il codice seguente.
Dim fw As StreamWriter
Nota
L'ambiente di sviluppo integrato (IDE) di Visual Studio ritorna all'editor di codice, con il punto di inserimento posizionato all'interno del gestore di eventi in cui è necessario aggiungere il codice.
Per scrivere nel file, utilizzare il metodo Write della classe StreamWriter. Aggiungere il codice seguente subito dopo Dim fw As StreamWriter. Non è necessario preoccuparsi della generazione di eccezioni nel caso in cui il file non venga trovato, poiché il file necessario 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 lasciare il campo 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
Trattandosi di un diario, è probabile che l'utente desideri assegnare una data a ogni voce. Inserire il codice seguente dopo fw = New StreamWriter("C:\MyDiary.txt", True) per impostare la variabile Today sulla data corrente.
Dim Today As DateTime Today = Now fw.Write(CStr(Today)) fw.Write(ControlChars.CrLf)
Aggiungere infine il codice necessario per la rimozione di TextBox. Aggiungere il codice seguente all'evento Click del pulsante Clear.
Entry.Text = ""
Aggiunta delle funzionalità di visualizzazione al diario
In questa sezione viene illustrato come aggiungere una funzionalità che consente la visualizzazione dell'ultima voce aggiunta a DisplayEntry TextBox. È inoltre possibile aggiungere un controllo ComboBox in cui vengono visualizzate le diverse voci e da cui gli utenti potranno selezionare la voce da visualizzare nel controllo DisplayEntryTextBox. Da MyDiary.txt viene creata un'istanza della classe StreamReader. Al pari della classe StreamWriter, StreamReader deve essere utilizzata con file di testo.
Per questa sezione della procedura, aggiungere al form i controlli riportati nella tabella che segue e impostare i valori corrispondenti per le relative proprietà.
Controllo |
Proprietà |
Valori |
---|---|---|
Nome Visible Dimensione Multiline |
DisplayEntry False 120,60 True |
|
Nome Text |
Visualizzazione Visualizzazione |
|
Nome Text |
GetEntries Get Entries |
|
Nome Text Enabled |
PickEntries Select an Entry False |
Per inserire la casella combinata
Il controllo ComboBox PickEntries viene utilizzato per visualizzare le date di immissione di ogni voce da parte dell'utente, affinché sia possibile selezionare una voce con una data specifica. Creare un gestore di eventi Click per il pulsante GetEntries e aggiungere il seguente codice.
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 eseguire il test del codice, premere F5 per compilare l'applicazione e fare clic su Get Entries. Fare clic sulla freccia a discesa nel controllo ComboBox per visualizzare le date delle voci.
Per scegliere e visualizzare le singole voci
Creare un gestore di eventi Click per il pulsante Display e aggiungere il seguente codice.
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 eseguire il test del codice, premere F5 per compilare l'applicazione, quindi immettere una voce. Fare clic su Get Entries, selezionare una voce dal controllo ComboBox, quindi scegliere Display. Nel controllo TextBox DisplayEntry verrà visualizzato il contenuto della voce selezionata.
Abilitazione degli utenti a eliminare o modificare le voci
Infine, è possibile includere un'ulteriore funzionalità che consente agli utenti di eliminare o modificare una voce mediante i pulsanti DeleteEntry e EditEntry, attivati solo quando viene visualizzata una voce.
Aggiungere al form i controlli riportati nella tabella che segue e impostare i valori corrispondenti per le relative proprietà.
Controllo |
Proprietà |
Valori |
---|---|---|
Nome Text Enabled |
DeleteEntry Delete Entry False |
|
Nome Text Enabled |
EditEntry Edit Entry False |
|
Nome Text Enabled |
SubmitEdit Submit Edit False |
Per attivare l'eliminazione e la modifica delle voci
Aggiungere il codice seguente all'evento Click del pulsante Display, dopo DisplayEntry.Text = ReadString.
DeleteEntry.enabled = True
Creare un gestore di eventi Click per il pulsante DeleteEntry e aggiungere il seguente codice.
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 una voce viene visualizzata dall'utente, il pulsante EditEntry viene attivato. Aggiungere il codice riportato di seguito all'evento Click del pulsante Display, dopo DisplayEntry.Text = ReadString.
EditEntry.Enabled = True
Creare un gestore di eventi Click per il pulsante EditEntry e aggiungere il seguente codice.
Entry.Text = DisplayEntry.Text SubmitEdit.Enabled = True
Creare un gestore di eventi Click per il pulsante SubmitEdit e aggiungere il seguente codice.
Dim 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 eseguire il test del codice, premere F5 per compilare l'applicazione. Fare clic su Get Entries, selezionare una voce, quindi scegliere Display. La voce verrà visualizzata nel controllo TextBox DisplayEntry. Fare clic su Edit Entry. La voce verrà visualizzata nel controllo TextBox Entry. Modificare la voce nel controllo TextBox Entry e fare clic su Submit Edit. Aprire il file MyDiary.txt per confermare la correzione, quindi selezionare una voce e fare clic su Delete Entry. Quando viene richiesta una conferma da MessageBox, scegliere OK. Chiudere l'applicazione e aprire MyDiary.txt per confermare l'eliminazione.