Guida al Visual Basic .NET
Capitolo 84° - Il Filesystem Gestire files e cartelle
Il .NET Framework offre una vastissima gamma di classi e metodi per operare qualsiasi operazioni di Input/Output e analisi di file e cartelle. Proprio per il suo scopo, il namespace che contiene tutto questo è chiamato System.IO. Sarebbe un'impresa immane quella di documentare il funzionamento di ogni membro di ogni classe del namespace in questione, quindi scriverò solamente delle direttive generali sui tipi da utilizzare in ciascuna situazione.
Esempio: File Browser
Questo programma di esempio permette di navigare nelle cartelle del computer e di ottenere informazioni sui files, usando un sistema di liste
simile (ma non uguale) a quello del vecchio Visual Basic 6. L'interfaccia del programma sarà più o meno così:
Class Form1 'Tiene traccia del drive e della cartella corrente Private CurrentDrive, CurrentDir As String 'Questa funzione permetterà di formattare le date 'in poco spazio Private Function FormatDate(ByVal D As Date) As String 'Ad esempio '"lunedì 26 novembre 2007, ore 19:97" Return D.ToString("dddd dd MMMM yyyy, ore HH:mm") End Function Private Sub lstDrive_SelectedIndexChanged(ByVal sender As Object, _ ByVal e As EventArgs) Handles lstDrive.SelectedIndexChanged If lstDrive.SelectedIndex = -1 Then Exit Sub End If 'Procede solo se la periferica è pronta If Not (New IO.DriveInfo(lstDrive.SelectedItem).IsReady) Then MessageBox.Show("La periferica non è pronta!", "File Browser", _ MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Exit Sub End If 'Memorizza il drive selezionato CurrentDrive = lstDrive.SelectedItem 'Quando si cambia driver, si resetta la lista delle 'cartelle quindi la cartella iniziale è uguale 'al drive CurrentDir = CurrentDrive.Clone 'Pulisce la lista delle cartelle lstDir.Items.Clear() 'Quando si seleziona un drive, carica le cartelle 'al suo interno For Each Dir As String In _ IO.Directory.GetDirectories(lstDrive.SelectedItem) lstDir.Items.Add(Dir) Next End Sub Private Sub lstDir_SelectedIndexChanged(ByVal sender As Object, _ ByVal e As EventArgs) Handles lstDir.SelectedIndexChanged 'Solo se è eramente selezionato un elemento procede If lstDir.SelectedIndex = -1 Then Exit Sub End If 'Memorizza la cartella selezionata CurrentDir = IO.Path.Combine(CurrentDir, lstDir.SelectedItem) 'Pulisce la lista delle cartelle e dei files lstDir.Items.Clear() lstFiles.Items.Clear() 'Carica le sottocartelle, solo con il nome For Each SubDir As String In IO.Directory.GetDirectories(CurrentDir) 'Si può fare anche con le cartelle, poichè le funzione 'considera solamente il formato della stringa lstDir.Items.Add(IO.Path.GetFileName(SubDir)) Next 'Carica i files interni alla cartella, solo con il nome For Each File As String In IO.Directory.GetFiles(CurrentDir) lstFiles.Items.Add(IO.Path.GetFileName(File)) Next End Sub Private Sub lstFiles_SelectedIndexChanged(ByVal sender As Object, _ ByVal e As EventArgs) Handles lstFiles.SelectedIndexChanged If lstFiles.SelectedIndex = -1 Then Exit Sub End If 'Ottiene le informazioni relative al file 'Path.Combine combina due directory o un file e 'una directory 'per ottenere un percorso completo Dim Info As New IO.FileInfo( _ IO.Path.Combine(CurrentDir, lstFiles.SelectedItem)) lblInfo.Text = String.Format( _ "Nome: {1}{0}Data creazione: {2}{0}Ultimo accesso: {3}{0}" & _ "Ultima modifica: {4}{0}Dimensione totale: {5:N0} bytes", vbCrLf, _ Info.Name, FormatDate(Info.CreationTime), _ FormatDate(Info.LastAccessTime), FormatDate(Info.LastWriteTime), _ Info.Length) End Sub Private Sub cmdParent_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles cmdParent.Click Try 'Si reca alla directory precedente nell'ordine 'gerarchico CurrentDir = IO.Directory.GetParent(CurrentDir).FullName lstDir.Items.Clear() For Each SubDir As String In IO.Directory.GetDirectories(CurrentDir) lstDir.Items.Add(IO.Path.GetFileName(SubDir)) Next Catch Ex As Exception 'Se le directory sono le prime in ordine, si 'genera un errore MessageBox.Show("Non è possibile risalire più indietro!", _ "File Browser", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Try End Sub End Class
C#, TypeScript, java, php, EcmaScript (JavaScript), Spring, Hibernate, React, SASS/LESS, jade, python, scikit, node.js, redux, postgres, keras, kubernetes, docker, hexo, etc...
|