Costruttore FileStream (String, FileMode, FileAccess, FileShare, Int32, Boolean)
Assembly: mscorlib (in mscorlib.dll)
public FileStream ( string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync )
public FileStream ( String path, FileMode mode, FileAccess access, FileShare share, int bufferSize, boolean useAsync )
public function FileStream ( path : String, mode : FileMode, access : FileAccess, share : FileShare, bufferSize : int, useAsync : boolean )
Parametri
- path
Percorso relativo o assoluto per il file che sarà incapsulato dall'oggetto FileStream corrente.
- mode
Costante di FileMode che determina la modalità di apertura o di creazione del file.
- access
Costante di FileAccess che determina la modalità con cui l'oggetto FileStream accede al file. Tale costante ottiene le proprietà CanRead e CanWrite dell'oggetto FileStream. Se il parametro path specifica un file su disco, CanSeek sarà true.
- share
Costante di FileShare che determina la modalità di condivisione del file da parte dei processi.
- bufferSize
Valore positivo Int32 maggiore di 0 che indica la dimensione del buffer. Nel caso dei valori di bufferSize compresi tra zero e otto, l'effettiva dimensione del buffer viene impostata su otto byte.
- useAsync
Specifica se utilizzare le operazioni di I/O asincrone o sincrone. Tenere presente, tuttavia, che il sistema operativo utilizzato potrebbe non supportare le operazioni di I/O asincrone. Pertanto, se si specifica true, l'handle potrebbe essere aperto in modalità sincrona a seconda della piattaforma utilizzata. Quando vengono aperti in modalità asincrona, i metodi BeginRead e BeginWrite offrono prestazioni migliori nelle operazioni di lettura o scrittura su dati di grandi dimensioni, ma potrebbero offrire prestazioni inferiori nelle operazioni di lettura o scrittura su dati di piccole dimensioni. Se l'applicazione è stata progettata per sfruttare le operazioni di I/O asincrone, impostare il parametro useAsync su true. L'utilizzo corretto delle operazioni di I/O asincrone può comportare un incremento delle prestazioni delle applicazioni fino a 10 volte, ma il relativo utilizzo senza la riprogettazione dell'applicazione per le operazioni di I/O asincrone può comportare una riduzione delle prestazioni fino a 10 volte.
| Tipo di eccezione | Condizione |
|---|---|
| path è riferimento null (Nothing in Visual Basic). | |
| path è una stringa vuota (""), contiene solo spazi oppure contiene uno o più caratteri non validi. -o- path fa riferimento a periferiche non basate su file come "con:", "com1:", "lpt1:" e così via in un ambiente NTFS. | |
| path fa riferimento a periferiche non basate su file come "con:", "com1:", "lpt1:" e così via in un ambiente non NTFS. | |
ArgumentException | path è una stringa vuota (""), contiene solo spazi oppure contiene uno o più caratteri non validi. |
| bufferSize è un valore negativo o zero. -o- mode, access o share contengono un valore non valido. | |
| Impossibile trovare il file, ad esempio quando mode è FileMode.Truncate o FileMode.Open e il file specificato da path non è disponibile. È necessario che il file sia già disponibile in queste modalità. | |
| Si è verificato un errore di I/O, ad esempio quando si specifica FileMode.CreateNew e il file specificato da path è già disponibile. -o- Sul sistema è in esecuzione Windows 98 o Windows 98 Second Edition e share è impostata su FileShare.Delete. -o- Il flusso è stato chiuso. | |
| Il chiamante non dispone dell'autorizzazione necessaria. | |
| Il percorso specificato non è valido, poiché, ad esempio, si trova su un'unità non connessa. | |
| Il parametro access richiesto non è consentito dal sistema operativo per il parametro path specificato, ad esempio quando access è Write o ReadWrite e il file o la directory è impostata per l'accesso in sola lettura. | |
| Il percorso, il nome file o entrambi superano la lunghezza massima definita dal sistema. Su piattaforme Windows, ad esempio, i percorsi devono essere composti da un numero di caratteri inferiore a 248 e i nomi file devono essere composti da un numero di caratteri inferiore a 260. |
.NET Framework non supporta l'accesso diretto ai dischi fisici attraverso percorsi costituiti da nomi di periferiche, quale "\\.\PHYSICALDRIVE0".
Il parametro path può essere un nome di file, incluso un file in una condivisione UNC (Universal Naming Convention).
Nota |
|---|
| path non deve essere necessariamente un file memorizzato su disco, ma può essere qualsiasi parte del sistema che supporta l'accesso tramite flussi. In base al sistema, ad esempio, questa classe può accedere a una periferica fisica. |
CanSeek è true per tutti gli oggetti FileStream che incapsulano i file. Se path indica una periferica che non supporta la ricerca, la proprietà CanSeek dell'oggetto FileStream risultante sarà false. Per ulteriori informazioni, vedere CanSeek.
Attenzione |
|---|
| La compilazione di un set di caratteri in una lingua specifica e il recupero degli stessi caratteri in una lingua diversa potrebbe comportare l'impossibilità di interpretare i caratteri e la generazione di un'eccezione. |
Nella tabella che segue vengono elencati esempi di altre attività di I/O tipiche o correlate.
| Per eseguire questa operazione... | Vedere l'esempio in questo argomento... |
|---|---|
| Creazione di un file di testo. | |
| Scrittura in un file di testo. | |
| Lettura da un file di testo. | |
| Aggiunta di testo a un file. | |
| Ridenominazione o spostamento di un file. | |
| Eliminazione di un file. | |
| Copia di un file. | |
| Acquisizione della dimensione di un file. | |
| Acquisizione degli attributi di un file. | |
| Impostazione degli attributi di un file. | |
| Determinazione dell'esistenza di un file. | |
| Lettura da un file binario. | Procedura: leggere e scrivere su un file di dati appena creato |
| Scrittura in un file binario. | Procedura: leggere e scrivere su un file di dati appena creato |
| Recupero di un'estensione di file. | |
| Recupero del percorso completo di un file. | |
| Recupero del nome e dell'estensione del file da un percorso. | |
| Modifica dell'estensione di un file. |
Nell'esempio di codice riportato di seguito viene spiegato come scrivere dati in un file in modo asincrono e come verificare che i dati siano stati scritti correttamente. Viene creato un oggetto State per passare le informazioni dal thread principale ai metodi EndReadCallback e EndWriteCallback.
using System; using System.IO; using System.Threading; class FStream { static void Main() { // Create a synchronization object that gets // signaled when verification is complete. ManualResetEvent manualEvent = new ManualResetEvent(false); // Create random data to write to the file. byte[] writeArray = new byte[100000]; new Random().NextBytes(writeArray); FileStream fStream = new FileStream("Test#@@#.dat", FileMode.Create, FileAccess.ReadWrite, FileShare.None, 4096, true); // Check that the FileStream was opened asynchronously. Console.WriteLine("fStream was {0}opened asynchronously.", fStream.IsAsync ? "" : "not "); // Asynchronously write to the file. IAsyncResult asyncResult = fStream.BeginWrite( writeArray, 0, writeArray.Length, new AsyncCallback(EndWriteCallback), new State(fStream, writeArray, manualEvent)); // Concurrently do other work and then wait // for the data to be written and verified. manualEvent.WaitOne(5000, false); } // When BeginWrite is finished writing data to the file, the // EndWriteCallback method is called to end the asynchronous // write operation and then read back and verify the data. static void EndWriteCallback(IAsyncResult asyncResult) { State tempState = (State)asyncResult.AsyncState; FileStream fStream = tempState.FStream; fStream.EndWrite(asyncResult); // Asynchronously read back the written data. fStream.Position = 0; asyncResult = fStream.BeginRead( tempState.ReadArray, 0 , tempState.ReadArray.Length, new AsyncCallback(EndReadCallback), tempState); // Concurrently do other work, such as // logging the write operation. } // When BeginRead is finished reading data from the file, the // EndReadCallback method is called to end the asynchronous // read operation and then verify the data. static void EndReadCallback(IAsyncResult asyncResult) { State tempState = (State)asyncResult.AsyncState; int readCount = tempState.FStream.EndRead(asyncResult); int i = 0; while(i < readCount) { if(tempState.ReadArray[i] != tempState.WriteArray[i++]) { Console.WriteLine("Error writing data."); tempState.FStream.Close(); return; } } Console.WriteLine("The data was written to {0} and verified.", tempState.FStream.Name); tempState.FStream.Close(); // Signal the main thread that the verification is finished. tempState.ManualEvent.Set(); } // Maintain state information to be passed to // EndWriteCallback and EndReadCallback. class State { // fStream is used to read and write to the file. FileStream fStream; // writeArray stores data that is written to the file. byte[] writeArray; // readArray stores data that is read from the file. byte[] readArray; // manualEvent signals the main thread // when verification is complete. ManualResetEvent manualEvent; public State(FileStream fStream, byte[] writeArray, ManualResetEvent manualEvent) { this.fStream = fStream; this.writeArray = writeArray; this.manualEvent = manualEvent; readArray = new byte[writeArray.Length]; } public FileStream FStream { get{ return fStream; } } public byte[] WriteArray { get{ return writeArray; } } public byte[] ReadArray { get{ return readArray; } } public ManualResetEvent ManualEvent { get{ return manualEvent; } } } }
import System.*;
import System.IO.*;
import System.Threading.*;
class FStream
{
public static void main(String[] args)
{
// Create a synchronization object that gets
// signaled when verification is complete.
ManualResetEvent manualEvent = new ManualResetEvent(false);
// Create random data to write to the file.
ubyte writeArray[] = new ubyte[100000];
new Random().NextBytes(writeArray);
FileStream fStream = new FileStream("Test#@@#.dat", FileMode.Create,
FileAccess.ReadWrite, FileShare.None, 4096, true);
// Check that the FileStream was opened asynchronously.
Console.WriteLine("fStream was {0}opened asynchronously.",
(fStream.get_IsAsync()) ? "" : "not ");
FStream classfStream = new FStream();
// Asynchronously write to the file.
IAsyncResult asyncResult = fStream.BeginWrite(writeArray, 0,
writeArray.length, new AsyncCallback(EndWriteCallback),
classfStream.new State(fStream, writeArray, manualEvent));
// Concurrently do other work and then wait
// for the data to be written and verified.
manualEvent.WaitOne(5000, false);
} //main
// When BeginWrite is finished writing data to the file, the
// EndWriteCallback method is called to end the asynchronous
// write operation and then read back and verify the data.
static void EndWriteCallback(IAsyncResult asyncResult)
{
State tempState = ((State)(asyncResult.get_AsyncState()));
FileStream fStream = tempState.get_FStream();
fStream.EndWrite(asyncResult);
// Asynchronously read back the written data.
fStream.set_Position(0);
asyncResult = fStream.BeginRead(tempState.get_ReadArray(), 0,
tempState.get_ReadArray().length ,
new AsyncCallback(EndReadCallback), tempState);
// Concurrently do other work, such as
// logging the write operation.
} //EndWriteCallback
// When BeginRead is finished reading data from the file, the
// EndReadCallback method is called to end the asynchronous
// read operation and then verify the data.
static void EndReadCallback(IAsyncResult asyncResult)
{
State tempState = ((State)(asyncResult.get_AsyncState()));
int readCount = tempState.get_FStream().EndRead(asyncResult);
int i = 0;
while((i < readCount)) {
if ( tempState.get_ReadArray()[i] !=
tempState.get_WriteArray()[i++] ) {
Console.WriteLine("Error writing data.");
tempState.get_FStream().Close();
return;
}
}
Console.WriteLine("The data was written to {0} and verified.",
tempState.get_FStream().get_Name());
tempState.get_FStream().Close();
// Signal the main thread that the verification is finished.
tempState.get_ManualEvent().Set();
} //EndReadCallback
// Maintain state information to be passed to
// EndWriteCallback and EndReadCallback.
class State
{
// fStream is used to read and write to the file.
private FileStream fStream;
// writeArray stores data that is written to the file.
private ubyte writeArray[];
// readArray stores data that is read from the file.
private ubyte readArray[];
// manualEvent signals the main thread
// when verification is complete.
private ManualResetEvent manualEvent;
public State(FileStream fStream, ubyte writeArray[],
ManualResetEvent manualEvent)
{
this.fStream = fStream;
this.writeArray = writeArray;
this.manualEvent = manualEvent;
readArray = new ubyte[writeArray.length ];
} //State
/** @property
*/
public FileStream get_FStream()
{
return fStream ;
}//get_FStream
/** @property
*/
public ubyte[] get_WriteArray()
{
return writeArray ;
}//get_WriteArray
/** @property
*/
public ubyte[] get_ReadArray()
{
return readArray;
}//get_ReadArray
/** @property
*/
public ManualResetEvent get_ManualEvent()
{
return manualEvent;
}//get_ManualEvent
} //State
} //FStream
- FileIOPermission per la lettura, la scrittura e l'accodamento ai file. Enumerazioni associate: FileIOPermissionAccess.Read, FileIOPermissionAccess.Write e FileIOPermissionAccess.Append.
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.
Nota