I/O di file e di flussiFile and Stream I/O

I/O (input/output) di file e di flussi fa riferimento al trasferimento di dati da o verso un supporto di archiviazione.File and stream I/O (input/output) refers to the transfer of data either to or from a storage medium. In .NET Framework gli spazi dei nomi System.IO contengono i tipi che consentono la lettura e la scrittura, sia in modo sincrono che in modo asincrono, su flussi di dati e file.In the .NET Framework, the System.IO namespaces contain types that enable reading and writing, both synchronously and asynchronously, on data streams and files. 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.These namespaces also contain types that perform compression and decompression on files, and types that enable communication through pipes and serial ports.

Un file è una raccolta ordinata e denominata di byte con archivio permanente.A file is an ordered and named collection of bytes that has persistent storage. Quando si lavora con i file, si usano i percorsi di directory, l'archiviazione su disco e i nomi di file e directory.When you work with files, you work with directory paths, disk storage, and file and directory names. 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).In contrast, a stream is a sequence of bytes that you can use to read from and write to a backing store, which can be one of several storage mediums (for example, disks or memory). 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.Just as there are several backing stores other than disks, there are several kinds of streams other than file streams, such as network, memory, and pipe streams.

File e directoryFiles and Directories

È possibile usare i tipi nello spazio dei nomi System.IO per interagire con i file e le directory.You can use the types in the System.IO namespace to interact with files and directories. 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.For example, you can get and set properties for files and directories, and retrieve collections of files and directories based on search criteria.

Di seguito sono riportate alcune classi di file e directory comunemente usate:Here are some commonly used file and directory classes:

  • 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.File - provides static methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • 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.FileInfo - provides instance methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • Directory: consente di usare metodi statici per la creazione, lo spostamento e l'enumerazione di directory e sottodirectory.Directory - provides static methods for creating, moving, and enumerating through directories and subdirectories.

  • DirectoryInfo: consente di usare metodi di istanza per la creazione, lo spostamento e l'enumerazione di directory e sottodirectory.DirectoryInfo - provides instance methods for creating, moving, and enumerating through directories and subdirectories.

  • Path: fornisce metodi e proprietà che consentono di elaborare le stringhe di directory indipendentemente dalla piattaforma.Path - provides methods and properties for processing directory strings in a cross-platform manner.

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.In addition to using these classes, Visual Basic users can use the methods and properties provided by the Microsoft.VisualBasic.FileIO.FileSystem class for file I/O.

Vedere Procedura: copiare le directory, Procedura: creare una visualizzazione directory e Procedura: enumerare directory e file.See How to: Copy Directories, How to: Create a Directory Listing, and How to: Enumerate Directories and Files.

FlussiStreams

La classe di base astratta Stream supporta la lettura e la scrittura di byte.The abstract base class Stream supports reading and writing bytes. Tutte le classi che rappresentano flussi ereditano dalla classe Stream.All classes that represent streams inherit from the Stream class. 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.The Stream class and its derived classes provide a common view of data sources and repositories, and isolate the programmer from the specific details of the operating system and underlying devices.

I flussi implicano tre operazioni fondamentali:Streams involve three fundamental operations:

  • Lettura: trasferimento di dati da un flusso a una struttura di dati, quale una matrice di byte.Reading - transferring data from a stream into a data structure, such as an array of bytes.

  • Scrittura: trasferimento di dati da un'origine dati a un flusso.Writing - transferring data to a stream from a data source.

  • Ricerca: interrogazione di un flusso e modifica della posizione corrente al suo interno.Seeking - querying and modifying the current position within a stream.

A seconda dell'origine dati o dell'archivio sottostante, è possibile che un flusso supportino queste funzionalità solo in parte.Depending on the underlying data source or repository, a stream might support only some of these capabilities. Ad esempio, la classe PipeStream non supporta la ricerca.For example, the PipeStream class does not support seeking. Le proprietà CanRead, CanWrite e CanSeek di un flusso specificano le operazioni supportate dal flusso.The CanRead, CanWrite, and CanSeek properties of a stream specify the operations that the stream supports.

Di seguito sono riportate alcune classi di flusso comunemente usate:Here are some commonly used stream classes:

  • FileStream: per la lettura e la scrittura su un file.FileStream – for reading and writing to a file.

  • IsolatedStorageFileStream: per la lettura e la scrittura su un file in uno spazio di memorizzazione isolato.IsolatedStorageFileStream – for reading and writing to a file in isolated storage.

  • MemoryStream: per la lettura e la scrittura in memoria come l'archivio di backup.MemoryStream – for reading and writing to memory as the backing store.

  • BufferedStream: per migliorare le prestazioni delle operazioni di lettura e scrittura.BufferedStream – for improving performance of read and write operations.

  • NetworkStream: per la lettura e la scrittura sui socket di rete.NetworkStream – for reading and writing over network sockets.

  • PipeStream: per la lettura e la scrittura su pipe unnamed e named.PipeStream – for reading and writing over anonymous and named pipes.

  • CryptoStream: per collegare i flussi di dati alle trasformazioni crittografiche.CryptoStream – for linking data streams to cryptographic transformations.

Per un esempio relativo all'uso dei flussi in modo asincrono, vedere I/O di file asincrono.For an example of working with streams asynchronously, see Asynchronous File I/O.

Reader e writerReaders and Writers

Lo spazio dei nomi System.IO fornisce anche i tipi per leggere caratteri codificati dai flussi e per scriverli nei flussi.The System.IO namespace also provides types for reading encoded characters from streams and writing them to streams. In genere i flussi sono progettati per l'input e l'output di byte.Typically, streams are designed for byte input and output. I tipi reader e writer gestiscono la conversione dei caratteri codificati in byte e viceversa, in modo che il flusso possa completare l'operazione.The reader and writer types handle the conversion of the encoded characters to and from bytes so the stream can complete the operation. Ogni classe reader e writer è associata a un flusso, che può essere recuperato tramite la proprietà BaseStream della classe.Each reader and writer class is associated with a stream, which can be retrieved through the class's BaseStream property.

Di seguito sono riportate alcune classi comunemente usate di reader e writer:Here are some commonly used reader and writer classes:

  • BinaryReader e BinaryWriter: per la lettura e la scrittura di tipi di dati primitivi, come ad esempio valori binari.BinaryReader and BinaryWriter – for reading and writing primitive data types as binary values.

  • 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.StreamReader and StreamWriter – for reading and writing characters by using an encoding value to convert the characters to and from bytes.

  • StringReader e StringWriter: per la lettura e la scrittura di caratteri da stringhe e viceversa.StringReader and StringWriter – for reading and writing characters to and from strings.

  • 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.TextReader and TextWriter – serve as the abstract base classes for other readers and writers that read and write characters and strings, but not binary data.

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.See How to: Read Text from a File, How to: Write Text to a File, How to: Read Characters from a String, and How to: Write Characters to a String.

Operazioni di I/O asincroneAsynchronous I/O Operations

La lettura o la scrittura di grandi quantità di dati può portare ad un elevato consumo di risorse.Reading or writing a large amount of data can be resource-intensive. È necessario eseguire queste attività in modo asincrono se l'applicazione deve mantenersi reattiva verso utente.You should perform these tasks asynchronously if your application needs to remain responsive to the user. 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.With synchronous I/O operations, the UI thread is blocked until the resource-intensive operation has completed. Usare le operazioni di I/O asincrono quando si sviluppano applicazioni Windows 8.x StoreWindows 8.x Store, per non dare l'impressione che l'applicazione abbia arrestato l'esecuzione.Use asynchronous I/O operations when developing Windows 8.x StoreWindows 8.x Store apps to prevent creating the impression that your app has stopped working.

I membri asincroni contengono nei propri nomi la parola Async, ad esempio i metodi CopyToAsync, FlushAsync, ReadAsync e WriteAsync.The asynchronous members contain Async in their names, such as the CopyToAsync, FlushAsync, ReadAsync, and WriteAsync methods. È possibile usare questi metodi tramite le parole chiave async e await.You use these methods with the async and await keywords.

Per altre informazioni, vedere I/O di file asincrono.For more information, see Asynchronous File I/O.

CompressioneCompression

Per compressione si intende il processo di riduzione della dimensione di un file per l'archiviazione.Compression refers to the process of reducing the size of a file for storage. La decompressione è il processo di estrazione del contenuto di un file compresso in modo che sia in un formato utilizzabile.Decompression is the process of extracting the contents of a compressed file so they are in a usable format. Lo spazio dei nomi System.IO.Compression contiene i tipi per la compressione e la decompressione di file e flussi.The System.IO.Compression namespace contains types for compressing and decompressing files and streams.

Le classi seguenti vengono spesso usate quando si comprimono e si decomprimono i file e i flussi:The following classes are frequently used when compressing and decompressing files and streams:

  • ZipArchive: per creare e recuperare le voci in un archivio ZIP.ZipArchive – for creating and retrieving entries in the zip archive.

  • ZipArchiveEntry: per la rappresentazione di un file compresso.ZipArchiveEntry – for representing a compressed file.

  • ZipFile: per creare, estrarre e aprire un pacchetto compresso.ZipFile – for creating, extracting, and opening a compressed package.

  • ZipFileExtensions: per creare ed estrarre le voci in un pacchetto compresso.ZipFileExtensions – for creating and extracting entries in a compressed package.

  • DeflateStream: per la compressione e la decompressione dei flussi mediante l'algoritmo Deflate.DeflateStream – for compressing and decompressing streams using the Deflate algorithm.

  • GZipStream: per la compressione e la decompressione dei flussi nel formato di dati gzip.GZipStream – for compressing and decompressing streams in gzip data format.

Vedere Procedura: comprimere ed estrarre file.See How to: Compress and Extract Files.

Spazio di memorizzazione isolatoIsolated Storage

L'archiviazione isolata è un meccanismo di archiviazione dati che offre isolamento e sicurezza definendo modi standardizzati di associare il codice ai dati salvati.Isolated storage is a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data. L'archiviazione offre un file system virtuale che è isolato dall'utente, dall'assembly ed eventualmente dal dominio.The storage provides a virtual file system that is isolated by user, assembly, and (optionally) domain. Lo spazio di memorizzazione isolato è particolarmente utile quando l'applicazione non dispone delle autorizzazioni di accesso ai file dell'utente.Isolated storage is particularly useful when your application does not have permission to access user files. È possibile salvare le impostazioni o i file per l'applicazione in modo tale che vengano controllati dai criteri di sicurezza del computer.You can save settings or files for your application in a manner that is controlled by the computer's security policy.

Lo spazio di memorizzazione isolato non è disponibile per le applicazioni Windows 8.x StoreWindows 8.x Store; usare invece le classi di dati nello spazio dei nomi Windows.Storage.Isolated storage is not available for Windows 8.x StoreWindows 8.x Store apps; instead, use application data classes in the Windows.Storage namespace. Per altre informazioni, vedere Dati dell'applicazione nel Centro per sviluppatori Windows.For more information, see Application data in the Windows Dev Center.

Le classi seguenti vengono spesso usate nell'implementazione dello spazio di memorizzazione isolato:The following classes are frequently used when implementing isolated storage:

Vedere Spazio di memorizzazione isolato.See Isolated Storage.

Operazioni di I/O nelle applicazioni Windows StoreI/O Operations in Windows Store apps

.NET per app di Windows 8.x Store.NET for Windows 8.x Store apps contiene molti tipi per leggere e scrivere su flussi; tuttavia, questo set non include tutti i tipi di I/O di .NET Framework.The .NET per app di Windows 8.x Store.NET for Windows 8.x Store apps contains many of the types for reading from and writing to streams; however, this set does not include all the .NET Framework I/O types.

Alcune differenze importanti da tenere presente quando si usano le operazioni di I/O nelle applicazioni Windows 8.x StoreWindows 8.x Store:Some important differences to note when using I/O operations in Windows 8.x StoreWindows 8.x Store apps:

Se necessario è possibile passare da flussi di .NET Framework a flussi di Windows Runtime e viceversa.You can convert between .NET Framework streams and Windows Runtime streams, if necessary. Per altre informazioni, vedere Procedura: eseguire la conversione tra flussi di .NET Framework e flussi di Windows Runtime o System.IO.WindowsRuntimeStreamExtensions.For more information, see How to: Convert Between .NET Framework Streams and Windows Runtime Streams or System.IO.WindowsRuntimeStreamExtensions.

Per altre informazioni sulle operazioni di I/O in un'applicazione Windows 8.x StoreWindows 8.x Store, vedere Guida rapida: Lettura e scrittura di un file.For more information about I/O operations in a Windows 8.x StoreWindows 8.x Store app, see Quickstart: Reading and writing files.

I/O e sicurezzaI/O and Security

Quando si usano 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.When you use the classes in the System.IO namespace, you must follow operating system security requirements such as access control lists (ACLs) to control access to files and directories. Vanno anche soddisfatti i requisiti imposti da FileIOPermission.This requirement is in addition to any FileIOPermission requirements. Gli elenchi di controllo dell'accesso (ACL) possono essere gestiti a livello di codice.You can manage ACLs programmatically. Per altre informazioni, vedere Procedura: aggiungere o rimuovere voci dell'elenco di controllo di accesso (ACL).For more information, see How to: Add or Remove Access Control List Entries.

I criteri di sicurezza predefiniti impediscono alle applicazioni Internet o Intranet di accedere ai file nel computer dell'utente.Default security policies prevent Internet or intranet applications from accessing files on the user’s computer. Pertanto, nello scrivere codice che verrà scaricato da Internet o Intranet, non usare classi I/O che richiedono un percorso a un file fisico.Therefore, do not use the I/O classes that require a path to a physical file when writing code that will be downloaded over the Internet or intranet. In alternativa, usare lo spazio di memorizzazione isolato per le applicazioni .NET Framework tradizionali o dati dell'applicazione per le applicazioni Windows 8.x StoreWindows 8.x Store.Instead, use isolated storage for traditional .NET Framework applications, or use application data for Windows 8.x StoreWindows 8.x Store apps.

Un controllo di sicurezza viene eseguito solo quando il flusso viene costruito.A security check is performed only when the stream is constructed. Di conseguenza, non aprire un flusso per poi passarlo a codice o domini di applicazione meno attendibili.Therefore, do not open a stream and then pass it to less-trusted code or application domains.

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à.Provides a list of I/O tasks associated with files, directories, and streams, and links to relevant content and examples for each task.

Vengono descritti il funzionamento di base dell'I/O asincrono e i relativi vantaggi in termini di prestazioni.Describes the performance advantages and basic operation of asynchronous I/O.

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.Describes a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data.

Vengono descritte le operazioni di pipe named e unnamed in .NET Framework.Describes anonymous and named pipe operations in the .NET Framework.

Vengono descritti i file mappati alla memoria, che includono il contenuto dei file su disco nella memoria virtuale.Describes memory-mapped files, which contain the contents of files on disk in virtual memory. È possibile usare file mappati alla memoria per modificare file molto grandi e per creare memoria condivisa per la comunicazione interprocesso.You can use memory-mapped files to edit very large files and to create shared memory for interprocess communication.