Condividi tramite


I/O di file e flusso

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:

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

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