I/O di file di base

La classe base astratta Stream supporta la lettura e la scrittura di byte. Stream integra il supporto asincrono. Le implementazioni predefinite di questa classe definiscono le letture e le scritture sincrone in termini di metodi asincroni corrispondenti e viceversa.

Tutte le classi che rappresentano flussi ereditano dalla classe Stream. La classe Stream e le relative classi derivate forniscono una rappresentazione generica degli archivi e delle origini dati, separando così il programmatore dai dettagli specifici del sistema operativo e delle periferiche sottostanti.

L'utilizzo dei flussi implica le seguenti operazioni di base:

  • Lettura. La lettura è il trasferimento dei dati da un flusso a una struttura di dati, quale una matrice di byte.

  • Scrittura. La scrittura è il trasferimento di dati da un'origine dati a un flusso.

  • Ricerca. La ricerca è l'operazione che prevede l'interrogazione di un flusso e la modifica della posizione corrente al suo interno.

A seconda dell'origine dati o dell'archivio sottostante, è possibile che i flussi supportino queste funzionalità solo in parte. NetworkStreams, ad esempio, non supporta la ricerca. Le proprietà CanRead, CanWrite e CanSeek di Stream e delle classi da essa derivate determinano le operazioni supportate dai vari flussi.

Per un elenco di attività di I/O comuni, vedere Attività di I/O comuni.

Nota

Gli utenti di Visual Basic possono scegliere di utilizzare metodi e proprietà forniti dall'oggetto My.Computer.FileSystem per l'I/O sul file. Per ulteriori informazioni, vedere Oggetto My.Computer.FileSystem.

Classi utilizzate per I/O di file

Directory fornisce metodi statici per la creazione, lo spostamento e l'enumerazione di directory e sottodirectory. La classe DirectoryInfo fornisce metodi di istanza.

DirectoryInfo fornisce metodi statici per la creazione, lo spostamento e l'enumerazione di directory e sottodirectory. La classe Directory fornisce metodi statici.

DriveInfo fornisce metodi di istanza per l'accesso alle informazioni su un'unità.

File fornisce metodi statici per la creazione, la copia, l'eliminazione, lo spostamento e l'apertura di file e semplifica la creazione di oggetti FileStream. La classe FileInfo fornisce metodi di istanza.

FileInfo fornisce metodi di istanza per la creazione, la copia, l'eliminazione, lo spostamento e l'apertura di file e semplifica la creazione di oggetti FileStream. La classe File fornisce metodi statici.

FileStream supporta l'accesso casuale ai file mediante il proprio metodo Seek. Per impostazione predefinita, FileStream apre i file in modo sincrono, ma supporta anche operazioni asincrone. File contiene metodi statici e FileInfo contiene metodi di istanza.

FileSystemInfo è la classe base astratta per gli oggetti FileInfo e DirectoryInfo.

Path fornisce metodi e proprietà che consentono di elaborare le stringhe di directory indipendentemente dalla piattaforma.

DeflateStream fornisce metodi e proprietà per la compressione e la decompressione dei flussi mediante l'algoritmo Deflate.

GZipStream fornisce metodi e proprietà per la compressione e la decompressione dei flussi. Per impostazione predefinita, questa classe utilizza lo stesso algoritmo della classe DeflateStream, ma può essere estesa in modo da utilizzare altri formati di compressione.

SerialPort fornisce metodi e proprietà per il controllo di una risorsa file della porta seriale.

File, FileInfo, DriveInfo, Path, Directory e DirectoryInfo sono classi sealed (in Microsoft Visual Basic, NotInheritable). È possibile creare nuove istanze di tali classi, ma non derivare da queste ulteriori classi.

Classi utilizzate per la lettura e la scrittura nei flussi

BinaryReader e BinaryWriter leggono e scrivono stringhe codificate e tipi di dati primitivi in Streams.

StreamReader legge caratteri da Streams, utilizzando Encoding per convertire i caratteri in byte e viceversa. StreamReader dispone di un costruttore che tenta di stabilire quale Encoding adottare per un determinato Stream, in base alla presenza di un preambolo specifico di Encoding, ad esempio un contrassegno dell'ordine dei byte.

StreamWriter scrive caratteri in Streams utilizzando Encoding per convertire i caratteri in byte.

StringReader legge caratteri da Strings. StringReader consente di trattare Strings con la stessa API, quindi l'output può essere un valore Stream in qualsiasi codifica o uno String.

StringWriter scrive caratteri in Strings. StringWriter consente di trattare Strings con la stessa API, quindi l'output può essere un valore Stream in qualsiasi codifica o uno String.

TextReader è la classe base astratta per oggetti StreamReader e StringReader. Mentre le implementazioni della classe astratta Stream sono progettate per l'input e l'output di byte, le implementazioni di TextReader sono progettate per l'output di caratteri Unicode.

TextWriter è la classe base astratta per oggetti StreamWriter e StringWriter. Mentre le implementazioni della classe astratta Stream sono progettate per l'input e l'output di byte, le implementazioni di TextWriter sono progettate per l'input di caratteri Unicode.

Classi Stream di I/O comuni

BufferedStream è uno Stream che aggiunge funzionalità di buffer a un altro Stream, quale un NetworkStream. (Si noti che FileStream già prevede il supporto del buffer, mentre MemoryStream non ne richiede l'uso. Un oggetto BufferedStream può essere affiancato ad alcuni tipi di flussi per migliorarne le prestazioni di lettura e scrittura. Un buffer è un blocco di byte in memoria utilizzato per memorizzare temporaneamente i dati e ridurre così il numero di chiamate al sistema operativo.

CryptoStream collega i flussi di dati alle trasformazioni di crittografia. Sebbene CryptoStream derivi da Stream, non fa parte dello spazio dei nomi System.IO, ma si trova nello spazio dei nomi System.Security.Cryptography.

MemoryStream è un flusso senza buffer che incapsula dati accessibili direttamente in memoria. Tale flusso non ha archivio di backup e può risultare utile come buffer temporaneo.

NetworkStream rappresenta uno Stream in una connessione di rete. Sebbene NetworkStream derivi da Stream, non fa parte dello spazio dei nomi System.IO, ma si trova nello spazio dei nomi System.Net.Sockets.

I/O e sicurezza

Quando si utilizzano le classi dello spazio dei nomi System.IO, l'accesso sarà subordinato alla conformità ai requisiti di sicurezza del sistema operativo, quali gli elenchi di controllo di accesso (ACL, Access Control List). Vanno inoltre soddisfatti i requisiti imposti da FileIOPermission.

Nota

Gli elenchi di controllo dell'accesso (ACL) possono essere gestiti a livello di codice. Per ulteriori informazioni, vedere Procedura: aggiungere o rimuovere voci dell'elenco di controllo di accesso (ACL) e Cenni preliminari sulla tecnologia ACL.

Caution noteAttenzione

I criteri di sicurezza predefiniti per Internet e le reti Intranet non consentono l'accesso ai file. Pertanto, se si scrive codice che verrà scaricato da Internet, non utilizzare le normali classi di I/O per l'archiviazione non isolata. Utilizzare invece le classi per l'archiviazione isolata.

Caution noteAttenzione

Quando si apre un flusso di file o di rete, il controllo di sicurezza verrà eseguito solo alla creazione del flusso. Usare quindi cautela quando si passano tali flussi a domini applicazione o a codice meno attendibile.

Vedere anche

Attività

Procedura: creare una visualizzazione directory
Procedura: leggere e scrivere su un file di dati appena creato
Procedura: aprire e accodare un file di log
Procedura: leggere testo da un file
Procedura: scrivere testo su un file
Procedura: leggere caratteri da una stringa
Procedura: scrivere caratteri in una stringa

Concetti

Attività di I/O comuni