
Un aspetto molto importante delle applicazioni Desktop è quella di poter interagire con il filesystem. C#, come tutti i linguaggi ad alto livello, ci mette a disposizione delle “interfacce” abbastanza semplici da gestire per creare, aprire, modificare ed eliminare file e cartelle del disco fisso. System.IO contiene infatti tutto ciò di cui abbiamo bisogno per lavorare con il filesystem. Tutto ciò che riguarda File e Cartelle si trova all’interno degli oggetti: File, Directory, FileInfo e DirectoryInfo. Le prime due hanno più che altro funzionalità statiche, ovvero non possono essere istanziate, ma mettono a disposizione funzioni per conoscere le dimensioni di un determinato file, se esiste o altro.
La prima cosa da fare quindi è importare le librerie adeguate nel nostro progetto:
using System.IO;
Facciamo un esempio:
Abbiamo sul disco fisso la cartella “C:temp” che può contenere o meno dei file. Il programma deve controllare l’esistenza di questa cartella e per ogni eventuale file contenuto all’interno deve mostrare il nome, la data di creazione e la dimensione. Nel caso in cui la cartella non esista, deve mostrare il messaggio “Cartella inesistente”, nel caso esista ma non contenga file, deve mostrare il messaggio “Nessun file”.
L’applicazione in sè non è eccessivamente difficile da realizzare, ma mette in mostra le due tipologie di oggetti di cui ho parlato poco fa. Ecco la soluzione usando le classi statiche:
static void Main(string[] args)
{
string folder = @"C:temp";
//controllo l'esistenza della cartella
if (!Directory.Exists(folder))
{
//se non esiste stampo a video un messaggio
Console.WriteLine("Cartella inesistente");
Console.Read();
//ed esco
return;
}
//se esiste controllo se contiene file
string[] files = Directory.GetFiles(folder);
if(files.Length == 0)
{
//se non ne contiene stampo a video un messaggio
Console.WriteLine("Nessun file");
Console.Read();
//ed esco
return;
}
//altrimenti per ogni file presente
foreach (string file in files)
{
//leggo la lunghezza in bytes
byte[] length = File.ReadAllBytes(file);
//e stampo quanto richiesto: Nome, Data creazione e Dimensione (in byte)
Console.WriteLine(String.Format(" - File: {0}{3} Creazione: {1}{3} Lunghezza: {2} bytes", System.IO.Path.GetFileName(file), File.GetCreationTime(file), length.Length, Environment.NewLine));
}
//esco
Console.Read();
}
Ecco invece la soluzione utilizzando gli oggetti non-statici:
static void Main(string[] args)
{
DirectoryInfo folder = new DirectoryInfo(@"C:temp");
//controllo l'esistenza della cartella
if (!folder.Exists)
{
//se non esiste stampo a video un messaggio
Console.WriteLine("Cartella inesistente");
Console.Read();
//ed esco
return;
}
//se esiste controllo se contiene file
FileInfo[] files = folder.GetFiles();
if(files.Length == 0)
{
//se non ne contiene stampo a video un messaggio
Console.WriteLine("Nessun file");
Console.Read();
//ed esco
return;
}
//altrimenti per ogni file presente
foreach (FileInfo file in files)
{
//e stampo quanto richiesto: Nome, Data creazione e Dimensione (in byte)
Console.WriteLine(String.Format(" - File: {0}{3} Creazione: {1}{3} Lunghezza: {2} bytes", file.Name, file.CreationTime, file.Length, Environment.NewLine));
}
//esco
Console.Read();
}
Concettualmente funzionano allo stesso modo, ma nel secondo caso usiamo qualche byte in più di memoria perchè teniamo salvati i riferimenti alla cartella (creando l’oggetto DirectoryInfo folder), ma nulla di preoccupante, infatti io preferisco la seconda versione.Dagli stessi oggetti possiamo ovviamente anche creare un file:
File.Create(folder.FullName + "" + "test.txt");
Eliminarlo:
File.Delete(folder.FullName + "" + "test.txt");
Per leggere e scrivere un file potete leggere questo articolo che ho scritto appositamente.Lo stesso vale naturalmente anche con le directory:
Directory.Create("C:test");
Eliminarla:
Directory.Delete("C:test");
Buona lettura!
Mi chiamo Denis Billi, ho 25 anni e sono della provincia di Ravenna. Mi sono laureato nell'estate del 2008 presso la facoltà di Ingegneria Informatica dell'università di Bologna e attualmente sto seguendo i corsi per la Laurea Specialistica in Ingegneria Informatica sempre all'università di Bologna.
Sembra abbastanza chiaro, mi paice come articolo.

Sono davvero felice che ti piaccia