Condividi tramite


I/O di file e di flussi

I/O (input/output) di file e di flussi fa riferimento al trasferimento di dati da o verso un supporto di archiviazione. In .NET gli System.IO spazi dei nomi contengono tipi che consentono la lettura e la scrittura, sia in modo sincrono che asincrono, nei flussi di dati e nei file. Questi spazi dei nomi contengono anche i tipi che eseguono la compressione e la decompressione dei file e i tipi che consentono la comunicazione tra le pipe e le porte seriali.

Un file è una raccolta ordinata e denominata di byte con archivio permanente. Quando si lavora con i file, si usano i percorsi di directory, l'archiviazione su disco e i nomi di file e directory. Al contrario, un flusso è una sequenza di byte che è possibile usare per leggere e scrivere in un archivio di backup, che può essere uno fra vari supporti di archiviazione (ad esempio, dischi o memoria). Così come esistono vari archivi di backup che non siano dischi, sono disponibili diversi tipi di flussi che non siano flussi di file, ad esempio la rete, la memoria e i flussi delle pipe.

File e directory

È possibile utilizzare i tipi nello spazio dei nomi System.IO per interagire con i file e le directory. Ad esempio, è possibile ottenere e impostare le proprietà dei file e delle directory e recuperare le raccolte di file e directory in base ai criteri di ricerca.

Per le convenzioni di denominazione dei percorsi e i modi per esprimere un percorso di file per i sistemi Windows, inclusa la sintassi del dispositivo DOS supportata in .NET Core 1.1 e versioni successive e .NET Framework 4.6.2 e versioni successive, vedere Formati di percorso dei file nei sistemi Windows.

Di seguito sono riportate alcune classi di file e directory comunemente usate:

  • File: fornisce metodi statici per la creazione, la copia, l'eliminazione, lo spostamento e l'apertura di file; inoltre facilita la creazione di un oggetto FileStream.

  • FileInfo: fornisce metodi di istanza per la creazione, la copia, l'eliminazione, lo spostamento e l'apertura di file; inoltre facilita la creazione di un oggetto FileStream.

  • 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.

È necessario fornire sempre affidabili funzionalità di gestione delle eccezioni quando si chiamano metodi del file system. Per altre informazioni, vedere Gestione degli errori di I/O.

Oltre a usare queste classi, gli utenti di Visual Basic possono usare i metodi e le proprietà forniti dalla classe Microsoft.VisualBasic.FileIO.FileSystem per l'I/O di file.

Vedere Procedura: copiare le directory, Procedura: creare una visualizzazione directory e Procedura: enumerare directory e file.

Flussi

La classe di base astratta Stream supporta la lettura e la scrittura di byte. Tutte le classi che rappresentano flussi ereditano dalla classe Stream. La classe Stream e le relative classi derivate forniscono una rappresentazione comune degli archivi e delle origini dati, separando così il programmatore dai dettagli specifici del sistema operativo e dei dispositivi sottostanti.

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.

A seconda dell'origine dati o dell'archivio sottostante, è possibile che un flusso supportino queste funzionalità solo in parte. Ad esempio, la classe PipeStream non supporta la ricerca. Le proprietà CanRead, CanWrite e CanSeek di un flusso specificano le operazioni supportate dal flusso.

Di seguito sono riportate alcune classi di flusso comunemente usate:

  • FileStream: per la lettura e la scrittura su un file.

  • IsolatedStorageFileStream: per la lettura e la scrittura su un file in uno spazio di memorizzazione isolato.

  • 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.

  • PipeStream: per la lettura e la scrittura su pipe unnamed e named.

  • CryptoStream: per collegare i flussi di dati alle trasformazioni crittografiche.

Per un esempio relativo all'uso dei flussi in modo asincrono, vedere I/O di file asincrono.

Reader e writer

Lo spazio dei nomi System.IO fornisce anche i tipi per leggere caratteri codificati dai flussi e per scriverli nei flussi. 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.

Vedere Procedura: leggere testo da un file, Procedura: scrivere un testo in un file, Procedura: leggere caratteri da una stringa e Procedura: scrivere caratteri in una stringa.

Operazioni di I/O asincrone

La lettura o la scrittura di grandi quantità di dati può portare ad un elevato consumo di risorse. È necessario eseguire queste attività in modo asincrono se l'applicazione deve mantenersi reattiva verso utente. Usando operazioni di I/O sincrone, il thread di interfaccia utente rimane bloccato fino a quando l'operazione, che richiede un elevato utilizzo di risorse, non sarà completata. Usa operazioni di I/O asincrone durante lo sviluppo di app dello Store Windows 8.x per impedire la creazione dell'impressione che l'app abbia smesso di funzionare.

I membri asincroni contengono Async i relativi nomi, ad esempio i CopyToAsyncmetodi , FlushAsync, ReadAsynce WriteAsync . È possibile usare questi metodi tramite le parole chiave async e await.

Per altre informazioni, vedere I/O di file asincrono.

Compressione

Per compressione si intende il processo di riduzione della dimensione di un file per l'archiviazione. La decompressione è il processo di estrazione del contenuto di un file compresso in modo che sia in un formato utilizzabile. Lo spazio dei nomi System.IO.Compression contiene i tipi per la compressione e la decompressione di file e flussi.

Le classi seguenti vengono spesso usate quando si comprimono e si decomprimono i file e i flussi:

  • ZipArchive: per creare e recuperare le voci in un archivio ZIP.

  • ZipArchiveEntry: per la rappresentazione di un file compresso.

  • ZipFile : per la creazione, l'estrazione e l'apertura di un pacchetto compresso.

  • ZipFileExtensions: per creare ed estrarre le voci in un pacchetto compresso.

  • DeflateStream: per la compressione e la decompressione dei flussi mediante l'algoritmo Deflate.

  • GZipStream: per la compressione e la decompressione dei flussi nel formato di dati gzip.

Vedere Procedura: comprimere ed estrarre file.

Spazio di memorizzazione isolato

L'archiviazione isolata è un meccanismo di archiviazione dati che offre isolamento e sicurezza definendo modi standardizzati di associare il codice ai dati salvati. L'archiviazione offre un file system virtuale che è isolato dall'utente, dall'assembly ed eventualmente dal dominio. Lo spazio di memorizzazione isolato è particolarmente utile quando l'applicazione non dispone delle autorizzazioni di accesso ai file dell'utente. È possibile salvare le impostazioni o i file per l'applicazione in modo tale che vengano controllati dai criteri di sicurezza del computer.

L'archiviazione isolata non è disponibile per le app dello Store Windows 8.x, ma usa le classi di dati dell'applicazione nello spazio dei Windows.Storage nomi . Per altre informazioni, vedere Application data (Dati delle applicazioni).

Le classi seguenti vengono spesso usate nell'implementazione dello spazio di memorizzazione isolato:

  • IsolatedStorage: fornisce la classe base per le implementazioni dello spazio di memorizzazione isolato.

  • IsolatedStorageFile: fornisce un'area per lo spazio di memorizzazione isolato che contiene file e directory.

  • IsolatedStorageFileStream: espone un file all'interno dello spazio di memorizzazione isolato.

Vedere Spazio di memorizzazione isolato.

Operazioni di I/O nelle applicazioni Windows Store

.NET per le app dello Store Windows 8.x contiene molti dei tipi per la lettura e la scrittura nei flussi. Tuttavia, questo set non include tutti i tipi di I/O .NET.

Alcune differenze importanti da notare quando si usano operazioni di I/O nelle app di Windows 8.x Store:

Se necessario è possibile passare da flussi di .NET Framework a flussi di Windows Runtime e viceversa. Per altre informazioni, vedere Procedura: Eseguire la conversione tra .NET Framework Flussi e Windows Runtime Flussi o WindowsRuntimeStreamExtensions.

Per altre informazioni sulle operazioni di I/O in un'app dello Store Windows 8.x, vedere Guida introduttiva: Lettura e scrittura di file.

I/O e sicurezza

Quando si utilizzano le classi nello spazio dei nomi System.IO, è necessario soddisfare i requisiti di sicurezza del sistema operativo, ad esempio gli elenchi di controllo dell'accesso (ACL), che controllano l'accesso ai file e alle directory. Vanno anche soddisfatti i requisiti imposti da FileIOPermission. Gli elenchi di controllo dell'accesso (ACL) possono essere gestiti a livello di codice. Per altre informazioni, vedere Procedura: aggiungere o rimuovere voci dell'elenco di controllo di accesso (ACL).

I criteri di sicurezza predefiniti impediscono alle applicazioni Internet o Intranet di accedere ai file nel computer dell'utente. Pertanto, non usare le classi di I/O che richiedono un percorso a un file fisico durante la scrittura di codice che verrà scaricato tramite Internet o intranet. Usare invece l'archiviazione isolata per le applicazioni .NET.

Un controllo di sicurezza viene eseguito solo quando il flusso viene costruito. Di conseguenza, non aprire un flusso per poi passarlo a codice o domini di applicazione meno attendibili.

  • Attività di I/O comuni
    Fornisce un elenco delle attività I/O associate ai file, alle directory e ai flussi, e i collegamenti al contenuto rilevante e ad esempi relativi a ogni attività.

  • I/O file asincrono
    Vengono descritti il funzionamento di base dell'I/O asincrono e i relativi vantaggi in termini di prestazioni.

  • Archiviazione isolato
    Viene descritto un meccanismo di archiviazione dei dati che fornisce isolamento e sicurezza tramite la definizione di modi standardizzati di associare il codice ai dati salvati.

  • Pipe
    Descrive le operazioni di pipe anonime e denominate in .NET.

  • File mappati alla memoria
    Vengono descritti i file mappati alla memoria, che includono il contenuto dei file su disco nella memoria virtuale. È possibile usare file mappati alla memoria per modificare file molto grandi e per creare memoria condivisa per la comunicazione interprocesso.