GESTIONE FILE E DIRECTORY
Di seguito sono riportate alcune classi di file e directory comunemente usate nella gestione di file e directory in c sharp:
- File fornisce metodi statici per la creazione, la copia, l’eliminazione, lo spostamento e l’apertura di file.
- FileInfo: fornisce metodi di istanza per la creazione, la copia, l’eliminazione, lo spostamento e l’apertura di file.
- Directory consente di utilizzare metodi statici per la creazione, lo spostamento e l’enumerazione di directory e sottodirectory.
- DirectoryInfo consente di usare metodi di istanza per la creazione, lo spostamento e l’enumerazione di directory e sottodirectory.
- Path: fornisce metodi e proprietà che consentono di elaborare le stringhe di directory indipendentemente dalla piattaforma.
FILE E DIRECTORY IN C SHARP I FLUSSI

I flussi implicano tre operazioni fondamentali:
- Lettura: trasferimento di dati da un flusso a una struttura di dati, quale una matrice di byte.
- Scrittura: trasferimento di dati da un’origine dati a un flusso.
- Ricerca: interrogazione di un flusso e modifica della posizione corrente al suo interno.
Di seguito sono riportate alcune classi di flusso comunemente usate:
- FileStream: per la lettura e la scrittura su un file.
- MemoryStream: per la lettura e la scrittura in memoria come l’archivio di backup.
- BufferedStream: per migliorare le prestazioni delle operazioni di lettura e scrittura.
- NetworkStream: per la lettura e la scrittura sui socket di rete.
FILE E DIRECTORY IN C SHARP READER E WRITER
Lo spazio dei nomi System.IO fornisce tipi per leggere caratteri codificati dai flussi e per scriverli nei flussi stessi. In genere i flussi sono progettati per l’input e l’output di byte. I tipi reader e writer gestiscono la conversione dei caratteri codificati in byte e viceversa, in modo che il flusso possa completare l’operazione. Ogni classe reader e writer è associata a un flusso, che può essere recuperato tramite la proprietà BaseStream della classe.
Di seguito sono riportate alcune classi comunemente usate di reader e writer:
- BinaryReader e BinaryWriter: per la lettura e la scrittura di tipi di dati primitivi, come ad esempio valori binari.
- StreamReader e StreamWriter: per la lettura e la scrittura di caratteri usando un valore di codifica per la conversione dei caratteri in byte e viceversa.
- StringReader e StringWriter: per la lettura e la scrittura di caratteri da stringhe e viceversa.
- TextReader e TextWriter: fungono da classi base astratte per gli altri reader e writer che leggono e scrivono caratteri e stringhe, ma non dati binari.
LETTURA E SCRITTURA DI UN FILE DI TESTO
using System;
using System.IO;
using System.Threading.Tasks;
namespace FileDirectory
{
class Program
{
static async Task Main(string[] args)
{
String file = await ReadWriteText();
Console.WriteLine(file);
}
//LETTURA E SCRITTURA DI UN FILE DI TESTO
private static async Task<string> ReadWriteText()
{
string buffer;
string output = null;
try
{
using(StreamReader reader = File.OpenText(@”C:\Temp\input.txt”))
{
using(StreamWriter writer = File.CreateText(@”C:\Temp\output.txt”))
{
while((buffer = await reader.ReadLineAsync())!=null)
{
writer.WriteLine(buffer);
output += buffer;
}
}
return output;
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
}
}
LISTA DEI FILE IN UNA DIRECTORY
using System;
using System.IO;
using System.Threading.Tasks;
namespace FileDirectory
{
class Program
{
static void Main(string[] args)
{
GetDirectoryFiles();
}
//LISTA DEI FILE IN UNA DIRECTORY
private static void GetDirectoryFiles()
{
string path = @"C:\Temp";
try
{
DirectoryInfo directory = new DirectoryInfo(path);
FileInfo[] files = directory.GetFiles("*.txt");
foreach(var item in files)
Console.WriteLine(item);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
return;
}
}
}
}
COPIARE UNA DIRECTORY
using System.IO;
using System.Threading.Tasks;
namespace FileDirectory
{
class Program
{
static void Main(string[] args)
{
CopyDirectory();
}
//COPIARE UNA DIRECTORY
private static void CopyDirectory()
{
DirectoryInfo source = new DirectoryInfo(@"C:\Temp2");
DirectoryInfo destination = new DirectoryInfo(@"C:\Temp3");
CopyDirectory(source,destination);
}
static void CopyDirectory(DirectoryInfo source, DirectoryInfo destination)
{
if (!destination.Exists)
{
destination.Create();
}
// Copia tutti i file
FileInfo[] files = source.GetFiles();
foreach (var file in files)
file.CopyTo(Path.Combine(destination.FullName,file.Name));
// Processa le sottodirectory
DirectoryInfo[] dirs = source.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
// Directory di destinazione
//Path.Combine combina due stringhe in un unico pah.
string destinationDir = Path.Combine(destination.FullName, dir.Name);
// Richiama la funzione stessa ricorsivamente
CopyDirectory(dir, new DirectoryInfo(destinationDir));
}
}
}
}
SCRIVERE E LEGGERE UN FILE BINARIO
using System;
using System.IO;
using System.Threading.Tasks;
namespace FileDirectory
{
class Program
{
static async Task Main(string[] args)
{
await ReadWriteBinaryFile();
}
//SCRIVERE E LEGGERE UN FILE BINARIO
private static async Task ReadWriteBinaryFile()
{
byte[] output = new byte[] {0x66, 0x67, 0x68, 0x69, 0x70,0x71,0x72, 0x73, 0x74, 0x75, 0x76,0x77};
try
{
if(File.Exists(@"C:\Temp\outputbinary.txt"))
File.Delete(@"C:\Temp\outputbinary.txt");
//SCRIVERE
using(FileStream stream = new FileStream(@"C:\Temp\outputbinary.txt",FileMode.Create))
{
await stream.WriteAsync(output,0,output.Length);
}
//LEGGERE
using(FileStream stream = new FileStream(@"C:\Temp\outputbinary.txt",FileMode.Open))
{
int count = 0;
int read;
byte[] buffer = new byte[output.Length];
while (count < output.Length)
{
read = await stream.ReadAsync(buffer, 0, output.Length);
Console.Write(Convert.ToChar(buffer.GetValue(count)) + " ");
count++;
}
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
APPROFONDIMENTO
In C#, lavorare con file e directory è un'operazione comune e la piattaforma .NET fornisce diverse classi per facilitare queste operazioni, come File, Directory, FileInfo e DirectoryInfo. Di seguito ti fornirò una spiegazione dettagliata su come utilizzare queste classi.
Classi Principali per la Gestione di File e Directory
1. Classe File: Fornisce metodi statici per la creazione, copia, eliminazione, spostamento e apertura di file. Inoltre, permette di leggere e scrivere direttamente sui file.
2. Classe Directory: Fornisce metodi statici per la creazione, eliminazione e spostamento di directory. Permette anche di ottenere informazioni sulle directory e sui loro contenuti.
3. Classe FileInfo: Fornisce proprietà e metodi di istanza per la manipolazione di file. A differenza della classe File, questa classe deve essere istanziata.
4. Classe DirectoryInfo: Fornisce proprietà e metodi di istanza per la manipolazione di directory. Come FileInfo, anche questa deve essere istanziata.
Operazioni con la Classe File
Ecco alcuni esempi di operazioni comuni usando la classe File.
using System;
using System.IO;
class Program
Operazioni con la Classe Directory
Ecco alcuni esempi di operazioni comuni usando la classe Directory.
using System;
using System.IO;
class Program
Utilizzo di FileInfo e DirectoryInfo
Le classi FileInfo e DirectoryInfo offrono metodi simili alle classi statiche File e Directory, ma possono essere utilizzate per operazioni orientate agli oggetti.
using System;
using System.IO;
class Program
Note Importanti
• Quando si lavora con file e directory, è importante gestire le eccezioni per evitare errori di runtime. Ad esempio, se si tenta di leggere un file che non esiste, si otterrà una FileNotFoundException.
• Utilizzare sempre percorsi assoluti o relativi correttamente formattati per evitare errori.
• Fare attenzione ai permessi di file e directory, specialmente quando si eseguono operazioni di scrittura o eliminazione.
Lascia un commento