Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'I/O di file e flusso (input/output) si riferisce al trasferimento dei 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 tipi che eseguono compressione e decompressione nei file e tipi che consentono la comunicazione tramite pipe e porte seriali.
Un file è una raccolta ordinata e denominata di byte con archiviazione permanente. Quando si lavora con i file, si lavora con 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 dei diversi supporti di archiviazione ,ad esempio dischi o memoria. Come esistono diversi archivi di backup diversi dai dischi, esistono diversi tipi di flussi diversi da quelli dei flussi di file, ad esempio i flussi di rete, memoria e pipe.
File e directory
È possibile usare i tipi nello spazio dei nomi System.IO per interagire con file e directory. Ad esempio, è possibile ottenere e impostare proprietà per file e directory e recuperare 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.
Ecco alcune classi di file e directory di uso comune:
File : fornisce metodi statici per la creazione, la copia, l'eliminazione, lo spostamento e l'apertura di file e consente di creare un FileStream oggetto.
FileInfo : fornisce metodi di istanza per la creazione, la copia, l'eliminazione, lo spostamento e l'apertura di file e consente di creare un FileStream oggetto.
Directory : fornisce metodi statici per la creazione, lo spostamento e l'enumerazione tramite directory e sottodirectory.
DirectoryInfo : fornisce metodi di istanza per la creazione, lo spostamento e l'enumerazione tramite directory e sottodirectory.
Path : fornisce metodi e proprietà per l'elaborazione delle stringhe di directory in modo multipiattaforma.
È consigliabile fornire sempre una gestione affidabile delle eccezioni quando si chiamano i 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'input/output dei file.
Vedere Procedura: Copiare directory, Procedura: Creare un elenco di directory e Procedura: enumerare directory e file.
Flussi
La classe Stream base astratta supporta la lettura e la scrittura di byte. Tutte le classi che rappresentano i flussi ereditano dalla Stream classe . La Stream classe e le relative classi derivate forniscono una visualizzazione comune delle origini dati e dei repository e isolano il programmatore dai dettagli specifici del sistema operativo e dei dispositivi sottostanti.
I flussi prevedono tre operazioni fondamentali:
Lettura: trasferimento di dati da un flusso in una struttura di dati, ad esempio una matrice di byte.
Scrittura: trasferimento di dati in un flusso da un'origine dati.
Ricerca: esecuzione di query e modifica della posizione corrente all'interno di un flusso.
A seconda dell'origine dati o del repository sottostante, un flusso potrebbe supportare solo alcune di queste funzionalità. Ad esempio, la PipeStream classe non supporta la ricerca. Le CanReadproprietà , CanWritee CanSeek di un flusso specificano le operazioni supportate dal flusso.
Ecco alcune classi di flusso comunemente usate:
FileStream – per la lettura e la scrittura in un file.
IsolatedStorageFileStream : per la lettura e la scrittura in un file in uno spazio di memorizzazione isolato.
MemoryStream : per la lettura e la scrittura in memoria come archivio di backup.
BufferedStream : per migliorare le prestazioni delle operazioni di lettura e scrittura.
NetworkStream : per la lettura e la scrittura su socket di rete.
PipeStream – per la lettura e la scrittura su pipe anonime e nominate.
CryptoStream : per collegare i flussi di dati alle trasformazioni crittografiche.
Per un esempio di utilizzo dei flussi in modo asincrono, vedere I/O di file asincrono.
Lettori e scrittori
Lo spazio dei nomi System.IO fornisce anche dei tipi per la lettura di caratteri codificati dai flussi e la scrittura nei flussi. In genere, i flussi sono progettati per l'input e l'output dei byte. I tipi di lettore e scrittore 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à della BaseStream classe.
Ecco alcune classi di reader e writer di uso comune:
BinaryReader e BinaryWriter : per la lettura e la scrittura di tipi di dati primitivi come valori binari.
StreamReader e StreamWriter : per leggere e scrivere caratteri usando un valore di codifica per convertire i caratteri in e da byte.
StringReader e StringWriter : per la lettura e la scrittura di caratteri da e verso stringhe.
TextReader e TextWriter : fungono da classi di base astratte per altri lettori e writer che leggono e scrivono caratteri e stringhe, ma non dati binari.
Vedere Procedura: Leggere testo da un file, Procedura: Scrivere 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 una grande quantità di dati può richiedere un elevato utilizzo di risorse. È consigliabile eseguire queste attività in modo asincrono se l'applicazione deve rimanere reattiva all'utente. Con le operazioni di I/O sincrone, il thread dell'interfaccia utente viene bloccato fino al completamento dell'operazione a elevato utilizzo di risorse. Usa operazioni di I/O asincrone durante lo sviluppo di app di Windows 8.x Store per impedire la creazione dell'impressione che l'app abbia smesso di funzionare.
I membri asincroni contengono Async nei relativi nomi, ad esempio i CopyToAsyncmetodi , FlushAsyncReadAsync, e WriteAsync . Questi metodi vengono usati con le async parole chiave e await .
Per altre informazioni, vedere I/O di file asincrono.
Compressione
La compressione si riferisce al processo di riduzione delle dimensioni di un file per l'archiviazione. La decompressione è il processo di estrazione del contenuto di un file compresso in modo che siano in un formato utilizzabile. Lo System.IO.Compression spazio dei nomi contiene tipi per la compressione e la decompressione di file e flussi.
Le classi seguenti vengono usate di frequente durante la compressione e la decompressione di file e flussi:
ZipArchive : per la creazione e il recupero di voci nell'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 elementi in un pacchetto compresso.
DeflateStream : per comprimere e decomprimere i flussi usando l'algoritmo Deflate.
GZipStream : per comprimere e decomprimere i flussi in formato di dati gzip.
Vedere Procedura: Comprimere ed estrarre file.
Spazio di memorizzazione isolato
L'archiviazione isolata è un meccanismo di archiviazione dei dati che fornisce isolamento e sicurezza definendo modi standardizzati per associare il codice ai dati salvati. L'archiviazione fornisce un file system virtuale isolato dall'utente, dall'assembly e (facoltativamente) dal dominio. L'archiviazione isolata è particolarmente utile quando l'applicazione non dispone dell'autorizzazione per accedere ai file utente. È possibile salvare le impostazioni o i file per l'applicazione in modo controllato dai criteri di sicurezza del computer.
Lo spazio di memorizzazione isolato non è disponibile per le app del Windows 8.x Store; invece, usa le classi di dati dell'applicazione nel namespace Windows.Storage. Per altre informazioni, vedere Dati dell'applicazione.
Durante l'implementazione dello spazio di memorizzazione isolato vengono spesso usate le classi seguenti:
IsolatedStorage : fornisce la classe base per le implementazioni dello spazio di memorizzazione isolato.
IsolatedStorageFile : fornisce un'area di archiviazione isolata che contiene file e directory.
IsolatedStorageFileStream - espone un file all'interno dello spazio di memorizzazione isolato.
Vedere Archiviazione isolata.
Operazioni di I/O nelle app di Windows Store
.NET per le app di Windows 8.x Store contiene molti dei tipi per la lettura e la scrittura in 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 correlati in modo specifico alle operazioni sui file, ad esempio File, FileInfoDirectory e DirectoryInfo, non sono inclusi in .NET per le app di Windows 8.x Store. Usare invece i tipi nello Windows.Storage spazio dei nomi di Windows Runtime, ad esempio StorageFile e StorageFolder.
Lo spazio di memorizzazione isolato non è disponibile; Usare invece i dati dell'applicazione.
Usare metodi asincroni, ad esempio ReadAsync e WriteAsync, per impedire il blocco del thread dell'interfaccia utente.
I tipi di compressione basati sul percorso ZipFile e ZipFileExtensions non sono disponibili. Usare invece i tipi nello spazio dei nomi Windows.Storage.Compression.
È possibile eseguire la conversione tra flussi .NET Framework e flussi di Windows Runtime, se necessario. Per altre informazioni, vedere Procedura: Eseguire la conversione tra flussi .NET Framework e flussi di Windows Runtime o WindowsRuntimeStreamExtensions.
Per altre informazioni sulle operazioni di I/O in un'app di Windows 8.x Store, vedere Avvio rapido: Lettura e scrittura di file.
I/O e sicurezza
Quando si usano le classi nello spazio dei nomi, è necessario seguire i requisiti di sicurezza del System.IO sistema operativo, ad esempio elenchi di controllo di accesso (ACL) per controllare l'accesso a file e directory. Questo requisito è in aggiunta a qualsiasi requisito FileIOPermission. È possibile gestire gli elenchi di controllo di accesso a livello di codice. Per altre informazioni, vedere Procedura: Aggiungere o rimuovere voci dell'elenco di controllo di accesso.
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 viene creato il flusso. Pertanto, non aprire un flusso e quindi passarlo a codice o domini di applicazione meno attendibili.
Argomenti correlati
Attività di I/O comuni
Fornisce un elenco di attività di I/O collegate a file, directory e flussi, e fornisce collegamenti a contenuti ed esempi pertinenti per ciascuna attività.I/O di file asincrono
Vengono descritti i vantaggi delle prestazioni e il funzionamento di base dell'I/O asincrona.Spazio di memorizzazione isolato
Descrive un meccanismo di archiviazione dei dati che fornisce isolamento e sicurezza definendo modalità standardizzate di associazione del codice ai dati salvati.tubi
Descrive le operazioni delle pipe anonime e nominate in .NET.Memory-Mapped File
Descrive i file mappati alla memoria, che contengono il contenuto dei file su disco nella memoria virtuale. È possibile usare i file mappati alla memoria per modificare file di grandi dimensioni e per creare memoria condivisa per la comunicazione interprocesso.