System.IO.FileStream-klass

Anmärkning

Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.

FileStream Använd klassen för att läsa från, skriva till, öppna och stänga filer i ett filsystem och för att ändra andra filrelaterade operativsystemreferenser, inklusive rör, standardindata och standardutdata. Du kan använda Readmetoderna , Write, CopyTooch Flush för att utföra synkrona åtgärder, eller ReadAsyncmetoderna , WriteAsync, CopyToAsyncoch FlushAsync för att utföra asynkrona åtgärder. Använd asynkrona metoder för att utföra resursintensiva filåtgärder utan att blockera huvudtråden. Den här prestandaöverväganden är särskilt viktig i en Windows 8.x Store-app eller skrivbordsapp där en tidskrävande strömåtgärd kan blockera användargränssnittstråden och få appen att se ut som om den inte fungerar. FileStream buffrar indata och utdata för bättre prestanda.

Viktigt!

Den här typen implementerar IDisposable gränssnittet. När du har använt typen bör du kassera den på ett direkt eller indirekt sätt. Om du vill ta bort typen direkt anropar du dess Dispose metod i ett try/catch block. Om du vill ta bort det indirekt använder du en språkkonstruktion som using (i C#) eller Using (i Visual Basic). Mer information finns i avsnittet "Använda ett objekt som implementerar IDisposable" i IDisposable gränssnittet.

Egenskapen IsAsync identifierar om filhandtaget öppnades asynkront. Du anger det här värdet när du skapar en instans av FileStream klassen med en konstruktor som har parametern isAsync, useAsynceller options . När egenskapen är trueanvänder strömmen överlappande I/O för att utföra filåtgärder asynkront. Dock behöver egenskapen IsAsync inte vara true för att anropa ReadAsyncmetoden, WriteAsynceller CopyToAsync. När egenskapen IsAsync är false och du anropar asynkrona läs- och skrivåtgärder blockeras inte användargränssnittstråden, men den faktiska I/O-åtgärden utförs synkront.

Metoden Seek stöder slumpmässig åtkomst till filer. Seek tillåter att läs-/skrivpositionen flyttas till valfri position i filen. Detta görs med referenspunktsparametrar för byteförskjutning. Byteförskjutningen är relativ till referenspunkten för sökning, som kan vara början, den nuvarande positionen eller slutet av den underliggande filen, som representeras av de tre medlemmarna i SeekOrigin enumerationen.

Anmärkning

Diskfiler stöder alltid slumpmässig åtkomst. Vid tidpunkten för konstruktionen anges egenskapsvärdet CanSeek till true eller false beroende på den underliggande filtypen. Om den underliggande filtypen är FILE_TYPE_DISK, enligt definitionen i winbase.h, är CanSeekegenskapsvärdet true . Annars är CanSeek egenskapsvärdet false.

Om en process avslutas med en del av en fil som är låst eller stänger en fil som har utestående lås, är beteendet odefinierat.

För katalogåtgärder och andra filåtgärder, se klasserna File, Directoryoch Path . Klassen File är en verktygsklass som har statiska metoder främst för att skapa FileStream objekt baserat på filsökvägar. Klassen MemoryStream skapar en ström från en bytematris och liknar FileStream klassen.

En lista över vanliga fil- och katalogåtgärder finns i Vanliga I/O-uppgifter.

Identifiering av ändringar i strömpositionen

När ett FileStream objekt inte har ett exklusivt grepp om handtaget kan en annan tråd samtidigt få åtkomst till filhandtaget och ändra positionen för operativsystemets filpekare som är associerad med filhandtaget. I det här fallet kan den cachelagrade positionen i FileStream objektet och cachelagrade data i bufferten komprometteras. Objektet FileStream utför rutinmässigt kontroller av metoder som har åtkomst till den cachelagrade bufferten för att säkerställa att operativsystemets handtagsposition är samma som den cachelagrade position som används av FileStream objektet.

Om en oväntad ändring i referenspositionen identifieras i ett anrop till Read metoden tar .NET bort innehållet i bufferten och läser strömmen från filen igen. Detta kan påverka prestanda, beroende på filens storlek och andra processer som kan påverka filströmmens position.

Om en oväntad ändring i referenspositionen identifieras i ett anrop till Write metoden ignoreras innehållet i bufferten och ett IOException undantag genereras.

Ett FileStream objekt kommer inte att ha ett exklusivt grepp på sitt handtag när antingen SafeFileHandle egenskapen används för att avslöja handtaget eller när FileStream objektet får SafeFileHandle egenskapen i konstruktorn.