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
Scegliere Nuovoprogetto dal menu File.
Verrà visualizzata la finestra di dialogo Nuovo progetto.
Nel riquadro Tipi progetto selezionare Progetti di Visual Basic, quindi fare clic su Applicazione Windows nel riquadro Modelli.
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.
Aggiungere al form i controlli riportati nella tabella che segue e impostare i valori corrispondenti per le relative proprietà.
Oggetto
Proprietà
Valore
Nome
Testo
txtDirectory
Directory
Nome
Testo
btnSubmit
Submit
Nome
Testo
btnExamine
Examine
Nome
Testo
lstFilePick
Select A File
Nome
Testo
Checked
chkFileLength
File Length
True
Nome
Testo
Checked
chkLastAccess
Last Access Time
True
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
Creare un gestore di eventi per Form1_Load facendo doppio clic sul form.
Verrà aperto l'editor di codice.
Aggiungere il codice riportato di seguito, affinché nel TextBoxtxtDirectory venga visualizzato il percorso corrente.
txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
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
Creare un gestore di eventi Click per btnSubmit facendo doppio clic sul controllo nel form.
Verrà aperto l'editor di codice.
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
Nell'evento btnSubmit_Click, dopo la riga di codice Dim NewPath As String, aggiungere Dim ErrorMessage As String su una nuova riga.
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
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
All'inizio dell'evento btnSubmit_Click, inserire il seguente codice.
Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).
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
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.
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.
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
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
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
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
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".
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".
Avviare l'applicazione.
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".
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.
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.
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".
Selezionare Last Access e Save Results, quindi fare clic su Examine.
Sul form dei risultati è visualizzata solo l'ora dell'ultimo accesso.
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.