Condividi tramite


Procedura dettagliata: modifica di file e directory in Visual Basic

Aggiornamento: novembre 2007

In questa procedura dettagliata vengono illustrati i principi fondamentali relativi a I/O di file in Microsoft Visual Basic 2005. Le funzionalità sono descritte mediante la creazione di una piccola applicazione, denominata FileExplorer, che consente di esaminare i file di testo presenti in una directory e fornisce informazioni quali gli attributi, l'ora dell'ultimo accesso e i primi 80 caratteri del file. Nell'applicazione è inoltre inclusa un'opzione che consente la scrittura di informazioni in un file di log.

Nota:

Le opzioni disponibili nelle finestre di dialogo e i nomi e le posizioni dei comandi di menu visualizzati potrebbero non corrispondere a quelli descritti nella Guida in linea in quanto dipendono dall'edizione o dalle impostazioni in uso. Questo argomento della Guida è stato creato basandosi su Impostazioni generali per lo sviluppo. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni nel menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Creazione dell'applicazione

Creare in primo luogo un form che consenta agli utenti di selezionare una directory, scegliere un file presente in tale directory, quindi scegliere le informazioni relative al file che desiderano recuperare.

Per creare il progetto

  1. Scegliere Nuovoprogetto dal menu File.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  2. Nel riquadro Tipi progetto selezionare Progetti di Visual Basic, quindi fare clic su Applicazione Windows nel riquadro Modelli.

  3. Nella casella Nome digitare FileExplorer per impostare il nome del progetto.

    Visual Studio aggiungerà il progetto a Esplora soluzioni e verrà aperto Progettazione Windows Form.

  4. Aggiungere al form i controlli riportati nella tabella che segue e impostare i valori corrispondenti per le relative proprietà.

    Oggetto

    Proprietà

    Valore

    TextBox

    Nome

    Testo

    txtDirectory

    Directory

    Button

    Nome

    Testo

    btnSubmit

    Submit

    Button

    Nome

    Testo

    btnExamine

    Examine

    ComboBox

    Nome

    Testo

    lstFilePick

    Select A File

    CheckBox

    Nome

    Testo

    Checked

    chkFileLength

    File Length

    True

    CheckBox

    Nome

    Testo

    Checked

    chkLastAccess

    Last Access Time

    True

    CheckBox

    Nome

    Testo

    Checked

    chkSave

    Save Results

    False

Visualizzazione della directory corrente

È necessario specificare un punto iniziale per l'applicazione FileExplorer. Di conseguenza, il TextBoxtxtDirectory utilizza la funzione My.Computer.FileSystem.CurrentDirectory per la restituzione e la visualizzazione di una stringa che rappresenta il percorso corrente.

Per restituire la directory corrente

  1. Creare un gestore di eventi per Form1_Load facendo doppio clic sul form.

    Verrà aperto l'editor di codice.

  2. Aggiungere il codice riportato di seguito, affinché nel TextBoxtxtDirectory venga visualizzato il percorso corrente.

    txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
    
  3. Eseguire il programma per verificare che venga restituito il percorso corretto.

    Il TextBoxtxtDirectory consente di visualizzare la directory corrente.

Selezione di una directory diversa

È possibile che l'utente desideri selezionare file che si trovano in una directory diversa. Per passare a un'altra directory, nell'applicazione viene utilizzata la stessa proprietà. Per selezionare una directory diversa, l'utente immette un nuovo percorso nel TextBoxtxtDirectory.

Per selezionare una directory diversa

  1. Creare un gestore di eventi Click per btnSubmit facendo doppio clic sul controllo nel form.

    Verrà aperto l'editor di codice.

  2. Aggiungere il codice riportato di seguito al gestore eventi Click.

    Dim NewPath As String
    ' NewPath holds the path the user has entered.
    NewPath = txtDirectory.Text
    ' Change the location to NewPath.
    My.Computer.FileSystem.CurrentDirectory = NewPath
    

Verifica della validità del percorso immesso

Utilizzare un'istruzione Try...Catch per rilevare le eccezioni generate dall'invio di un percorso vuoto o non valido.

Per assicurare l'immissione di percorsi validi

  1. Nell'evento btnSubmit_Click, dopo la riga di codice Dim NewPath As String, aggiungere Dim ErrorMessage As String su una nuova riga.

  2. Prima della riga di codice My.Computer.FileSystem.CurrentDirectory = NewPath, aggiungere un'istruzione Try in una riga autonoma, come illustrato di seguito. Se si preme il tasto di ritorno a capo, l'editor di codice inserirà automaticamente le istruzioni Catch ex As Exception e End Try. Rimuovere tali istruzioni, in quanto verranno aggiunte nel passaggio successivo.

    Try
    
  3. Dopo la riga di codice My.Computer.FileSystem.CurrentDirectory = NewPath, aggiungere il seguente codice.

        ' This checks to make sure the path is not blank.
    Catch ex As Exception When NewPath = ""
        ErrorMessage = "You must enter a path."
        ' This catches errors caused by a path that is not valid.
    Catch
        ErrorMessage = "You must enter a valid path.  If trying " & _
        "to access a different drive, remember to include the drive " & _
        "letter."
    Finally
        ' Display the error message only if one exists.
        If ErrorMessage <> Nothing Then
            MsgBox(ErrorMessage)
        End If
    End Try
    

Visualizzazione del contenuto della directory in un controllo ComboBox

Per abilitare l'applicazione alla visualizzazione del contenuto della directory corrente, utilizzare il metodo My.Computer.FileSystem.GetFiles, che restituisce un insieme di stringhe che rappresentano i nomi dei file presenti nella directory. Per selezionare solo i file con un criterio specifico, utilizzare i caratteri jolly con GetFiles. Nell'esempio riportato di seguito, sono restituiti solo i file con estensione .txt.

Per visualizzare il contenuto della directory

  1. All'inizio dell'evento btnSubmit_Click, inserire il seguente codice.

    Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).

  2. Dopo la riga di codice End Try, inserire il seguente codice.

    fileList = My.Computer.FileSystem.GetFiles( _
        My.Computer.FileSystem.CurrentDirectory, _
        FileIO.SearchOption.SearchTopLevelOnly, "*.txt")
    For Each foundFile As String In fileList
        lstFilePick.Items.Add(foundFile)
    Next
    

    Le informazioni ottenute vengono visualizzate nel ComboBoxlstFilePick, da cui è possibile selezionare un file specifico da esaminare.

Eseguire il test dell'applicazione eseguendola prima di tutto su una directory che non contiene alcun file TXT, quindi su una contenente più file TXT. Nel primo caso viene visualizzato il messaggio di errore appropriato. Nel secondo caso nel ComboBox viene creato un elenco di tutti i file .txt presenti nella directory specificata nel TextBoxtxtDirectory.

Consentire a un utente di selezionare un file da esaminare

Anche se nel ComboBoxlstFilePick sono visualizzati tutti i file presenti in una directory, è possibile che un utente desideri selezionare ed esaminare un file specifico.

Per attivare la selezione di un file specifico

  • Per confermare la selezione di un file, creare un gestore di eventi Click per btnExamine_Click e aggiungere il codice riportato di seguito.

    Dim thisFile As System.IO.FileInfo
    thisFile = My.Computer.FileSystem.GetFileInfo(CStr(lstFilePick.SelectedItem))
    

Consentire a un utente di stabilire quali informazioni raccogliere

Una volta visualizzati i file nel ComboBoxlstFilePick, tramite codice aggiuntivo è possibile consentire all'utente di specificare le informazioni recuperate. Ad esempio, è possibile che un utente desideri semplicemente conoscere la data dell'ultimo accesso al file o le dimensioni di un file. Per personalizzare i risultati, selezionare o deselezionare le caselle di controllo (chkLastAccess, chkFileLength).

Per visualizzare informazioni specifiche

  1. Dichiarare le variabili riportate di seguito all'inizio dell'evento btnExamine_Click dopo (lstFilePick.SelectedItem).

    Dim stringlength As String
    stringLength = "The file's length, in bytes, is: "
    Dim stringLastAccess As String
    stringLastAccess = "The file was last accessed on: "
    Dim LastAccess As Date
    Dim Length As Long
    Dim FirstLine As String = ""
    Dim FinalString As String = ""
    Dim NewName As String
    NewName = CType(lstFilePick.SelectedItem, String)
    
    If NewName = Nothing Then
        MsgBox("You must select a file to examine.")
        Exit Sub
    End If
    

    Tramite il metodo My.Computer.FileSystem.GetFileInfo viene restituito un oggetto FileInfo in cui è possibile cercare informazioni su un file.

  2. Aggiungere il codice che segue al termine dell'evento btnExamine_Click.

    ' Check last access time.
    If chkLastAccess.Checked = True Then
        LastAccess = thisFile.LastAccessTime
    End If
    

La proprietà LastAccessTime consente di determinare l'ora dell'ultimo accesso al file. Il valore restituito Date indica la data e l'ora della creazione o dell'ultima modifica del file.

  1. Aggiungere il codice che segue al termine dell'evento btnExamine_Click.

    ' Check Length.
    If chkFileLength.Checked = True Then
        Length = thisFile.Length
    End If
    

La proprietà Length, che consente di determinare la lunghezza del file, restituisce un valore di tipo Long, che indica la lunghezza in byte del file.

Visualizzazione dei risultati

Per completare le funzionalità dell'applicazione, in un controllo MsgBox vengono visualizzate le informazioni raccolte.

Per visualizzare i risultati

  1. Al termine dell'istruzione If che determina se è stato selezionato o meno il CheckBoxchkLastAccess, aggiungere il codice seguente prima dell'istruzione finale End If.

    ' Add to the messagebox.
    FinalString = FinalString & stringLastAccess & LastAccess & "." _
    & vbCrLf
    
  2. Al termine dell'istruzione If che determina se è stato selezionato o meno il CheckBoxchkFileLength, aggiungere il codice seguente prima dell'istruzione finale End If.

    ' Add to the messagebox.
    FinalString = FinalString & stringlength & CStr(Length) & "." _
    & vbCrLf
    
  3. Al termine dell'istruzione If che determina se è stato selezionato o meno il CheckBoxchkFirstLine, aggiungere il codice seguente prima dell'istruzione finale End If.

    ' Add to the messagebox.
    FinalString &= FirstLine & vbCrLf
    

Salvataggio dei risultati

È possibile che un utente desideri salvare i risultati dell'esame di un file. Aggiungere quindi codice che consenta di verificare se è presente un file di log, crearne uno se necessario e infine scrivere i risultati in tale file.

Per creare un file di log

  • Aggiungere il codice riportato di seguito alla fine dell'evento btnExamine_Click.

    ' Check to see if results should be saved.
    If chkSave.Checked = True And FinalString <> "" Then
        My.Computer.FileSystem.WriteAllText("log.txt", FinalString, True)
    End If
    

Per eseguire il test dell'applicazione

  1. Nella directory scelta, creare un file di testo denominato test.txt con la prima riga riportata di seguito:

    "Questa è la prima riga del primo file. Solo i file di testo verranno esaminati dall'applicazione FileExplorer".

  2. Nella stessa directory, creare un secondo file di testo denominato test2.txt con la seguente prima riga:

    "Questa è la prima riga del secondo file. Solo i file di testo verranno esaminati dall'applicazione FileExplorer".

  3. Avviare l'applicazione.

  4. Immettere un percorso non valido e fare clic su Submit.

    Verrà visualizzato il seguente messaggio: "You must enter a valid path. If trying to access a different drive, remember to include the drive letter".

  5. Immettere il percorso della directory in cui viene memorizzato il file test.txt e fare clic su Submit.

    Nel ComboBoxlstFilePick vengono visualizzati i file di testo.

  6. Selezionare test.txt nel ComboBoxlstFilePick. Assicurarsi che tutte le caselle di controllo siano selezionate, quindi fare clic su Examine.

    Nel form dei risultati sono incluse l'ora dell'ultimo accesso al file e la lunghezza del file.

  7. Selezionare test2.txt nel ComboBoxlstFilePick, cancellare il contenuto di tutte le caselle di controllo, quindi selezionare Examine.

    Verrà visualizzato il seguente messaggio di errore: "No file attribute checkboxes selected".

  8. Selezionare Last Access e Save Results, quindi fare clic su Examine.

    Sul form dei risultati è visualizzata solo l'ora dell'ultimo accesso.

  9. Chiudere FileExplorer.

    Poiché l'opzione Save Results è stata selezionata, un file di log denominato log.txt è stato generato nella stessa directory in cui si trovano i file di testo.

Per verificare il log

  • Nella directory corrente aprire log.txt e confermare che le informazioni registrate da FileExplorer sono corrette.

Vedere anche

Riferimenti

Proprietà My.Computer.FileSystem.CurrentDirectory

Metodo My.Computer.FileSystem.GetFileInfo