Classe System.IO.FileStream

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

Usare la FileStream classe per leggere, scrivere, aprire e chiudere file in un file system e per modificare altri handle del sistema operativo correlati ai file, incluse pipe, input standard e output standard. È possibile usare i Readmetodi , CopyToWrite, , e Flush per eseguire operazioni sincrone o i ReadAsyncmetodi , WriteAsyncCopyToAsync, , e FlushAsync per eseguire operazioni asincrone. Usare i metodi asincroni per eseguire operazioni di file a elevato utilizzo di risorse senza bloccare il thread principale. Questa considerazione sulle prestazioni è particolarmente importante in un'app di Windows 8.x Store o in un'app desktop in cui un'operazione di flusso dispendiosa in termini di tempo può bloccare il thread dell'interfaccia utente e rendere l'app come se non funzionasse. FileStream memorizza nel buffer l'input e l'output per ottenere prestazioni migliori.

Importante

Il tipo implementa l'interfaccia IDisposable. Dopo aver utilizzato il tipo, è necessario eliminarlo direttamente o indirettamente. Per eliminare direttamente il tipo, chiamare il metodo Dispose in un blocco try/catch. Per eliminarlo indirettamente, utilizzare un costrutto di linguaggio come ad esempio using in C# o Using in Visual Basic. Per altre informazioni, vedere la sezione "Uso di un oggetto che implementa IDisposable" nell'argomento relativo all'interfaccia IDisposable.

La IsAsync proprietà rileva se l'handle di file è stato aperto in modo asincrono. Questo valore viene specificato quando si crea un'istanza della FileStream classe usando un costruttore con un isAsyncparametro , useAsynco options . Quando la proprietà è true, il flusso utilizza operazioni di I/O sovrapposte per eseguire operazioni sui file in modo asincrono. Tuttavia, la IsAsync proprietà non deve necessariamente true chiamare il ReadAsyncmetodo , WriteAsynco CopyToAsync . Quando la IsAsync proprietà è false e si chiamano le operazioni di lettura e scrittura asincrone, il thread dell'interfaccia utente non è ancora bloccato, ma l'operazione di I/O effettiva viene eseguita in modo sincrono.

Il Seek metodo supporta l'accesso casuale ai file. Seek consente di spostare la posizione di lettura/scrittura in qualsiasi posizione all'interno del file. Questa operazione viene eseguita con i parametri del punto di riferimento dell'offset di byte. L'offset dei byte è relativo al punto di riferimento di ricerca, che può essere l'inizio, la posizione corrente o la fine del file sottostante, come rappresentato dai tre membri dell'enumerazione SeekOrigin .

Nota

I file del disco supportano sempre l'accesso casuale. Al momento della costruzione, il valore della CanSeek proprietà viene impostato su true o false a seconda del tipo di file sottostante. Se il tipo di file sottostante è FILE_TYPE_DISK, come definito in winbase.h, il valore della CanSeek proprietà è true. In caso contrario, il valore della CanSeek proprietà è false.

Se un processo termina con parte di un file bloccato o chiude un file con blocchi in sospeso, il comportamento non è definito.

Per le operazioni di directory e altre operazioni sui file, vedere le Fileclassi , Directorye Path . La File classe è una classe di utilità che dispone principalmente di metodi statici per la creazione di oggetti in base ai percorsi di FileStream file. La MemoryStream classe crea un flusso da una matrice di byte ed è simile alla FileStream classe .

Per un elenco delle operazioni comuni di file e directory, vedere Attività di I/O comuni.

Rilevamento delle modifiche della posizione del flusso

Quando un FileStream oggetto non dispone di un blocco esclusivo sul relativo handle, un altro thread potrebbe accedere contemporaneamente all'handle di file e modificare la posizione del puntatore al file del sistema operativo associato all'handle di file. In questo caso, la posizione memorizzata nella cache nell'oggetto FileStream e i dati memorizzati nella cache nel buffer potrebbero essere compromessi. L'oggetto FileStream esegue regolarmente controlli sui metodi che accedono al buffer memorizzato nella cache per garantire che la posizione dell'handle del sistema operativo corrisponda alla posizione memorizzata nella cache utilizzata dall'oggetto FileStream .

Se viene rilevata una modifica imprevista nella posizione dell'handle in una chiamata al Read metodo , .NET rimuove il contenuto del buffer e legge nuovamente il flusso dal file. Ciò può influire sulle prestazioni, a seconda delle dimensioni del file e di qualsiasi altro processo che potrebbe influire sulla posizione del flusso di file.

Se viene rilevata una modifica imprevista nella posizione dell'handle in una chiamata al Write metodo , il contenuto del buffer viene eliminato e viene generata un'eccezione IOException .

Un FileStream oggetto non avrà un blocco esclusivo sul relativo handle quando si accede alla SafeFileHandle proprietà per esporre l'handle o all'oggetto FileStream viene assegnata la SafeFileHandle proprietà nel relativo costruttore.