Fil- och stream-I/O

Fil- och ström-I/O (indata/utdata) avser överföring av data till eller från ett lagringsmedium. I .NET System.IO innehåller namnrymderna typer som möjliggör läsning och skrivning, både synkront och asynkront, i dataströmmar och filer. Dessa namnområden innehåller också typer som utför komprimering och dekomprimering på filer och typer som möjliggör kommunikation via rör och serieportar.

En fil är en ordnad och namngiven samling byte som har beständig lagring. När du arbetar med filer arbetar du med katalogsökvägar, disklagring och fil- och katalognamn. En ström är däremot en sekvens med byte som du kan använda för att läsa från och skriva till ett lagringslager som kan vara ett av flera lagringsmedier (till exempel diskar eller minne). På samma sätt som det finns flera andra backningslager än diskar finns det flera typer av andra strömmar än filströmmar, till exempel nätverk, minne och pipe-strömmar.

Filer och kataloger

Du kan använda typerna System.IO i namnområdet för att interagera med filer och kataloger. Du kan till exempel hämta och ange egenskaper för filer och kataloger, och hämta samlingar av filer och kataloger utifrån sökkriterier.

Sökvägsnamngivningskonventioner och sätt att uttrycka en filsökväg för Windows system, inklusive med DOS-enhetssyntaxen som stöds i .NET Core 1.1 och senare och .NET Framework 4.6.2 och senare, finns i Filsökvägsformat på Windows system.

Här är några vanliga fil- och katalogklasser:

  • File – innehåller statiska metoder för att skapa, kopiera, ta bort, flytta och öppna filer och hjälpa till att skapa ett FileStream objekt.

  • FileInfo – innehåller instansmetoder för att skapa, kopiera, ta bort, flytta och öppna filer och hjälpa till att skapa ett FileStream objekt.

  • Directory – tillhandahåller statiska metoder för att skapa, flytta och räkna upp genom kataloger och underkataloger.

  • DirectoryInfo – innehåller instansmetoder för att skapa, flytta och räkna upp genom kataloger och underkataloger.

  • Path – tillhandahåller metoder och egenskaper för bearbetning av katalogsträngar på ett plattformsoberoende sätt.

Du bör alltid tillhandahålla robust undantagshantering när du anropar filsystemmetoder. Mer information finns i Hantera I/O-fel.

Förutom att använda dessa klasser kan Visual Basic användare använda de metoder och egenskaper som tillhandahålls av Microsoft.VisualBasic.FileIO.FileSystem klassen för fil-I/O.

Se Så här gör du: Kopiera kataloger, Så här skapar du en kataloglista och Så här räknar du upp kataloger och filer.

Strömmar

Den abstrakta basklassen Stream stöder läsning och skrivning av byte. Alla klasser som representerar strömmar ärver från Stream klassen. Klassen Stream och dess härledda klasser ger en gemensam vy över datakällor och lagringsplatser och isolerar programmeraren från den specifika informationen om operativsystemet och underliggande enheter.

Flöden omfattar tre grundläggande åtgärder:

  • Läsning – överföra data från en dataström till en datastruktur, till exempel en matris med byte.

  • Skriva – överföra data till en dataström från en datakälla.

  • Söker – fråga och ändra den aktuella positionen i en dataström.

Beroende på den underliggande datakällan eller lagringsplatsen kan en dataström endast ha stöd för vissa av dessa funktioner. Klassen stöder till exempel PipeStream inte sökning. Egenskaperna CanRead, CanWriteoch för CanSeek en dataström anger de åtgärder som strömmen stöder.

Här är några vanliga strömklasser:

  • FileStream – för att läsa och skriva till en fil.

  • IsolatedStorageFileStream – för läsning och skrivning till en fil i isolerad lagring.

  • MemoryStream – för läsning och skrivning till minnet som lagringsplats.

  • BufferedStream – för att förbättra prestanda för läs- och skrivåtgärder.

  • NetworkStream – för läsning och skrivning över nätverksuttag.

  • PipeStream – för att läsa och skriva över anonyma och namngivna rör.

  • CryptoStream – för att länka dataströmmar till kryptografiska transformeringar.

Ett exempel på hur du arbetar med strömmar asynkront finns i Asynkron fil-I/O.

Läsare och författare

Namnområdet System.IO innehåller också typer för att läsa kodade tecken från strömmar och skriva dem till strömmar. Normalt är strömmar utformade för byteindata och utdata. Läsar- och skrivartyperna hanterar konverteringen av kodade tecken till och från byte så att strömmen kan slutföra åtgärden. Varje läsar- och skrivarklass är associerad med en ström som kan hämtas via klassens BaseStream egenskap.

Här är några vanliga läsar- och skrivarklasser:

  • BinaryReader och BinaryWriter – för att läsa och skriva primitiva datatyper som binära värden.

  • StreamReader och StreamWriter – för att läsa och skriva tecken med hjälp av ett kodningsvärde för att konvertera tecknen till och från byte.

  • StringReader och StringWriter – för att läsa och skriva tecken till och från strängar.

  • TextReader och TextWriter – fungerar som abstrakta basklasser för andra läsare och författare som läser och skriver tecken och strängar, men inte binära data.

Se Anvisningar: Läsa text från en fil, Så här skriver du text till en fil, Så här: Läs tecken från en sträng och Så här skriver du tecken till en sträng.

Asynkrona I/O-åtgärder

Att läsa eller skriva en stor mängd data kan vara resurskrävande. Du bör utföra dessa uppgifter asynkront om ditt program måste vara responsivt för användaren. Med synkrona I/O-åtgärder blockeras användargränssnittstråden tills den resursintensiva åtgärden har slutförts. Använd asynkrona I/O-åtgärder när du utvecklar Windows 8.x Store-appar för att förhindra att intrycket av att appen har slutat fungera.

De asynkrona medlemmarna innehåller Async i sina namn, till exempel CopyToAsyncmetoderna , FlushAsync, ReadAsyncoch WriteAsync . Du använder dessa metoder med nyckelorden async och await .

Mer information finns i Asynkron fil-I/O.

Komprimering

Komprimering syftar på processen att minska storleken på en fil för lagring. Dekomprimering är processen att extrahera innehållet i en komprimerad fil så att de är i ett användbart format. Namnområdet System.IO.Compression innehåller typer för att komprimera och dekomprimera filer och strömmar.

Följande klasser används ofta vid komprimering och dekomprimering av filer och strömmar:

  • ZipArchive – för att skapa och hämta poster i zip-arkivet.

  • ZipArchiveEntry – för att representera en komprimerad fil.

  • ZipFile – för att skapa, extrahera och öppna ett komprimerat paket.

  • ZipFileExtensions – för att skapa och extrahera poster i ett komprimerat paket.

  • DeflateStream – för att komprimera och dekomprimera strömmar med deflate-algoritmen.

  • GZipStream – för att komprimera och dekomprimera strömmar i gzip-dataformat.

Se Så här: Komprimera och extrahera filer.

Isolerad lagring

Isolerad lagring är en mekanism för datalagring som ger isolering och säkerhet genom att definiera standardiserade sätt att associera kod med sparade data. Lagringen tillhandahåller ett virtuellt filsystem som är isolerat av en användare, sammansättning och (valfritt) domän. Isolerad lagring är särskilt användbart när programmet inte har behörighet att komma åt användarfiler. Du kan spara inställningar eller filer för ditt program på ett sätt som styrs av datorns säkerhetsprincip.

Isolerad lagring är inte tillgänglig för Windows 8.x Store-appar. Använd i stället programdataklasser i Windows.Storage namnområdet. Mer information finns i Programdata.

Följande klasser används ofta vid implementering av isolerad lagring:

Se Isolerad Storage.

I/O-åtgärder i Windows Store-appar

.NET för Windows 8.x Store-appar innehåller många av typerna för läsning från och skrivning till strömmar. Den här uppsättningen innehåller dock inte alla .NET I/O-typer.

Några viktiga skillnader att tänka på när du använder I/O-åtgärder i Windows 8.x Store-appar:

Du kan konvertera mellan .NET Framework strömmar och Windows Runtime strömmar om det behövs. Mer information finns i Så här konverterar du mellan .NET Framework Flöden och Windows Runtime Flöden eller WindowsRuntimeStreamExtensions.

Mer information om I/O-åtgärder i en Windows 8.x Store-app finns i Snabbstart: Läsa och skriva filer.

I/O och säkerhet

När du använder klasserna i System.IO namnområdet måste du följa operativsystemets säkerhetskrav, till exempel åtkomstkontrollistor (ACL: er) för att styra åtkomsten till filer och kataloger. Det här kravet gäller utöver eventuella FileIOPermission krav. Du kan hantera ACL:er programmatiskt. Mer information finns i Så här lägger du till eller tar bort Access Control listposter.

Standardsäkerhetsprinciper förhindrar att Internet- eller intranätprogram kommer åt filer på användarens dator. Använd därför inte de I/O-klasser som kräver en sökväg till en fysisk fil när du skriver kod som laddas ned via Internet eller intranätet. Använd i stället isolerad lagring för .NET-program.

En säkerhetskontroll utförs bara när dataströmmen har konstruerats. Öppna därför inte en ström och skicka den sedan till mindre betrodd kod eller programdomäner.

  • Vanliga I/O-uppgifter
    Innehåller en lista över I/O-uppgifter som är associerade med filer, kataloger och strömmar samt länkar till relevant innehåll och exempel för varje aktivitet.

  • Asynkron fil-I/O
    Beskriver prestandafördelar och grundläggande drift av asynkron I/O.

  • Isolerad Storage
    Beskriver en datalagringsmekanism som ger isolering och säkerhet genom att definiera standardiserade sätt att associera kod med sparade data.

  • Rör
    Beskriver anonyma och namngivna pipe-åtgärder i .NET.

  • Minnesmappade filer
    Beskriver minnesmappade filer som innehåller innehållet i filer på disken i det virtuella minnet. Du kan använda minnesmappade filer för att redigera mycket stora filer och för att skapa delat minne för kommunikation mellan processer.