Questo argomento non è stato ancora valutato - Valuta questo argomento

Costruttore FileStream (String, FileMode, FileAccess, FileShare, Int32, Boolean)

Inizializza una nuova istanza della classe FileStream con il percorso, la modalità di creazione, l'autorizzazione di lettura/scrittura e condivisione nonché la dimensione del buffer e lo stato sincrono o asincrono specificati.

Spazio dei nomi: System.IO
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 eccezioneCondizione

ArgumentNullException

path è riferimento null (Nothing in Visual Basic).

ArgumentException

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.

NotSupportedException

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.

ArgumentOutOfRangeException

bufferSize è un valore negativo o zero.

-o-

mode, access o share contengono un valore non valido.

FileNotFoundException

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à.

IOException

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.

SecurityException

Il chiamante non dispone dell'autorizzazione necessaria.

DirectoryNotFoundException

Il percorso specificato non è valido, poiché, ad esempio, si trova su un'unità non connessa.

UnauthorizedAccessException

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.

PathTooLongException

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).

NotaNota

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.

Nota di avvisoAttenzione

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.

Procedura: scrivere testo su un file

Scrittura in un file di testo.

Procedura: scrivere testo su un file

Lettura da un file di testo.

Procedura: leggere testo da un file

Aggiunta di testo a un file.

Procedura: aprire e accodare un file di log

File.AppendText

FileInfo.AppendText

Ridenominazione o spostamento di un file.

File.Move

FileInfo.MoveTo

Eliminazione di un file.

File.Delete

FileInfo.Delete

Copia di un file.

File.Copy

FileInfo.CopyTo

Acquisizione della dimensione di un file.

FileInfo.Length

Acquisizione degli attributi di un file.

File.GetAttributes

Impostazione degli attributi di un file.

File.SetAttributes

Determinazione dell'esistenza di un file.

File.Exists

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.

Path.GetExtension

Recupero del percorso completo di un file.

Path.GetFullPath

Recupero del nome e dell'estensione del file da un percorso.

Path.GetFileName

Modifica dell'estensione di un file.

Path.ChangeExtension

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

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.

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0 1.0
Il documento è risultato utile?
(1500 caratteri rimanenti)

Aggiunte alla community

AGGIUNGI
© 2013 Microsoft. Tutti i diritti riservati.