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:
I tipi specifici relativi alle operazioni sui file, ad esempio File, DirectoryFileInfoe DirectoryInfo, non sono inclusi in .NET per le app di Windows 8.x Store. Usare invece i tipi nello spazio dei nomi Windows.Storage di Windows Runtime, ad esempio StorageFile e StorageFolder.
Lo spazio di memorizzazione isolato non è disponibile; usare invece i dati dell'applicazione.
Usare i metodi asincroni, ad esempio ReadAsync e WriteAsync, per evitare il blocco del thread UI.
I tipi di compressione ZipFile e ZipFileExtensions, che si basano sul percorso, non sono disponibili. Usare invece i tipi nello spazio dei nomi Windows.Storage.Compression.
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.
Argomenti correlati
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.