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

  1. Scegliere Nuovo progetto dal menu File.

  2. Nel riquadro Nuovo progetto fare clic su Applicazione Windows.

  3. Nella casella Nome digitare MyDiary e fare clic su OK.

    Visual Studio aggiunge il progetto a Esplora soluzioni e viene aperto Progettazione Windows Form.

  4. 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

  1. Scegliere Codice dal menu Visualizza per aprire l'editor di codice.

  2. 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.

  3. 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.

  1. 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
    
  2. 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
    
  3. 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 variabile Today sulla data corrente.

    Dim Today As DateTime
    Today = Now
    fw.Write(CStr(Today))
    fw.Write(ControlChars.CrLf)
    
  4. 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 DisplayEntryTextBox. È anche possibile aggiungere un oggetto ComboBox che visualizza le diverse voci e da cui un utente può selezionare una voce da visualizzare nell'oggetto DisplayEntryTextBox. 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

  1. L'oggetto PickEntriesComboBox 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 pulsante GetEntries 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
    
  2. 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

  1. 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
    
  2. 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 DisplayEntryTextBox.

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

  1. Aggiungere il codice seguente all'evento Click del pulsante Display, dopo DisplayEntry.Text = ReadString.

    DeleteEntry.enabled = True
    
  2. 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
    
  3. Quando un utente visualizza una voce, il pulsante EditEntry viene abilitato. Aggiungere il codice seguente all'evento Click del pulsante Display dopo DisplayEntry.Text = ReadString.

    EditEntry.Enabled = True
    
  4. Creare un gestore eventi Click per il pulsante EditEntry e aggiungervi il codice seguente.

    Entry.Text = DisplayEntry.Text
    SubmitEdit.Enabled = True
    
  5. Creare un gestore eventi Click per il pulsante SubmitEdit e aggiungervi il codice seguente

    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 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 DisplayEntryTextBox. Fare clic su Modifica voce. La voce viene visualizzata nell'oggetto EntryTextBox. Modificare la voce nell'oggetto EntryTextBox 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.

Vedi anche