I/O di file di base
La classe di 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 le relative classi derivate determinano le operazioni supportate dai diversi 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 i metodi e le proprietà forniti dalla classe Microsoft.VisualBasic.FileIO.FileSystem per l'I/O di file. |
Classi utilizzate per I/O di file
Directory consente di utilizzare metodi statici per la creazione, lo spostamento e l'enumerazione di directory e sottodirectory. La classe DirectoryInfo fornisce metodi di istanza.
DirectoryInfo consente di utilizzare metodi di istanza 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 i metodi statici per creare, copiare, eliminare, spostare e aprire i file, nonché supporto per la creazione di un oggetto FileStream. La classe FileInfo fornisce metodi di istanza.
FileInfo fornisce i metodi di istanza per creare, copiare, eliminare, spostare e aprire i file, nonché supporto per la creazione di un oggetto FileStream. La classe File fornisce metodi statici.
FileStream supporta l'accesso casuale ai file tramite il 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 di 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 di base astratta per 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 di base astratta per 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
Un oggetto BufferedStream è un oggetto Stream che aggiunge funzionalità di buffer a un altro oggetto Stream, quale un oggetto NetworkStream. (FileStream prevede già 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.
Un oggetto 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.
Un oggetto 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.
Un oggetto NetworkStream rappresenta un oggetto 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. |
Attenzione |
---|
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. |
Attenzione |
---|
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