Delen via


Bestands- en stream-I/O

Bestand en stream I/O (invoer/uitvoer) verwijst naar de overdracht van gegevens naar of van een opslagmedium. In .NET bevatten de System.IO naamruimten typen die lezen en schrijven, zowel synchroon als asynchroon, in gegevensstromen en bestanden mogelijk maken. Deze naamruimten bevatten ook typen die compressie en decompressie op bestanden uitvoeren, en typen die communicatie mogelijk maken via pijpen en seriële poorten.

Een bestand is een geordende en benoemde verzameling bytes met permanente opslag. Wanneer u met bestanden werkt, werkt u met mappaden, schijfopslag en bestands- en mapnamen. Een stream is daarentegen een reeks bytes die u kunt gebruiken om van en naar een back-uparchief te lezen en te schrijven. Dit kan een van de verschillende opslagmedia zijn (bijvoorbeeld schijven of geheugen). Net zoals er verschillende back-uparchieven zijn dan schijven, zijn er verschillende soorten streams anders dan bestandsstromen, zoals netwerk-, geheugen- en pijpstreams.

Bestanden en mappen

U kunt de typen in de System.IO naamruimte gebruiken om te communiceren met bestanden en mappen. U kunt bijvoorbeeld eigenschappen voor bestanden en mappen ophalen en instellen en verzamelingen bestanden en mappen ophalen op basis van zoekcriteria.

Voor padnaamconventies en de manieren om een bestandspad voor Windows-systemen uit te drukken, inclusief de DOS-apparaatsyntaxis die wordt ondersteund in .NET Core 1.1 en hoger en .NET Framework 4.6.2 en hoger, raadpleegt u bestandspadindelingen op Windows-systemen.

Hier volgen enkele veelgebruikte bestands- en mapklassen:

  • File - biedt statische methoden voor het maken, kopiëren, verwijderen, verplaatsen en openen van bestanden en helpt bij het maken van een FileStream object.

  • FileInfo - biedt exemplaarmethoden voor het maken, kopiëren, verwijderen, verplaatsen en openen van bestanden, en helpt bij het maken van een FileStream object.

  • Directory - biedt statische methoden voor het maken, verplaatsen en inventariseren van mappen en submappen.

  • DirectoryInfo - biedt exemplaarmethoden voor het maken, verplaatsen en inventariseren van mappen en submappen.

  • Path - biedt methoden en eigenschappen voor het verwerken van maptekenreeksen op een platformoverschrijdende manier.

U moet altijd robuuste verwerking van uitzonderingen bieden bij het aanroepen van bestandssysteemmethoden. Zie I/O-fouten afhandelen voor meer informatie.

Naast het gebruik van deze klassen kunnen Visual Basic-gebruikers de methoden en eigenschappen van de Microsoft.VisualBasic.FileIO.FileSystem klasse gebruiken voor bestands-I/O.

Zie Instructies: Mappen kopiëren, Instructies: Een directorylijst maken en Instructies: Directories en bestanden opsommen.

Stromen

De abstracte basisklasse Stream ondersteunt het lezen en schrijven van bytes. Alle klassen die stromen vertegenwoordigen, nemen over van de Stream klasse. De Stream klasse en de afgeleide klassen bieden een algemene weergave van gegevensbronnen en opslagplaatsen en isoleren de programmeur van de specifieke details van het besturingssysteem en onderliggende apparaten.

Streams omvatten drie fundamentele bewerkingen:

  • Lezen: gegevens uit een stroom overbrengen naar een gegevensstructuur, zoals een matrix van bytes.

  • Schrijven: gegevens overdragen naar een stroom vanuit een gegevensbron.

  • Positioneren - het opvragen en aanpassen van de huidige positie binnen een datastroom.

Afhankelijk van de onderliggende gegevensbron of opslagplaats kan een stream slechts enkele van deze mogelijkheden ondersteunen. De klasse biedt bijvoorbeeld PipeStream geen ondersteuning voor zoeken. De CanRead, CanWriteen CanSeek eigenschappen van een stroom geven de bewerkingen op die door de stream worden ondersteund.

Hier volgen enkele veelgebruikte streamklassen:

  • FileStream – voor het lezen en schrijven naar een bestand.

  • IsolatedStorageFileStream – voor het lezen en schrijven naar een bestand in geïsoleerde opslag.

  • MemoryStream – voor het lezen en schrijven naar geheugen als achtergrondopslag.

  • BufferedStream – voor het verbeteren van de prestaties van lees- en schrijfbewerkingen.

  • NetworkStream – voor het lezen en schrijven via netwerksockets.

  • PipeStream – voor het lezen en schrijven over anonieme en benoemde pipes.

  • CryptoStream – voor het koppelen van gegevensstromen aan cryptografische transformaties.

Zie Asynchrone bestands-I/O voor een voorbeeld van het asynchroon werken met streams.

Lezers en schrijvers

De System.IO naamruimte biedt ook typen voor het lezen van gecodeerde tekens uit streams en het schrijven ervan naar streams. Normaal gesproken zijn streams ontworpen voor byteinvoer en -uitvoer. De lezer- en schrijftypen verwerken de conversie van de gecodeerde tekens naar en van bytes, zodat de stream de bewerking kan voltooien. Elke lezer- en schrijfklasse is gekoppeld aan een stream, die kan worden opgehaald via de eigenschap van BaseStream de klasse.

Hier volgen enkele veelgebruikte lezer- en schrijfklassen:

  • BinaryReader en BinaryWriter – voor het lezen en schrijven van primitieve gegevenstypen als binaire waarden.

  • StreamReader en StreamWriter – voor het lezen en schrijven van tekens met behulp van een coderingswaarde om de tekens te converteren naar en van bytes.

  • StringReader en StringWriter – voor het lezen en schrijven van tekens naar en van tekenreeksen.

  • TextReader en TextWriter – fungeren als abstracte basisklassen voor andere lezers en schrijvers die tekens en tekenreeksen lezen en schrijven, maar niet binaire gegevens.

Zie Procedure: Tekst lezen uit een bestand, Procedure: Tekst naar een bestand schrijven, Procedure: Tekens lezen uit een tekenreeks en procedures: Tekens naar een tekenreeks schrijven.

Asynchrone I/O-bewerkingen

Het lezen of schrijven van een grote hoeveelheid gegevens kan resource-intensief zijn. U moet deze taken asynchroon uitvoeren als uw toepassing responsief moet blijven voor de gebruiker. Met synchrone I/O-bewerkingen wordt de UI-thread geblokkeerd totdat de resource-intensieve bewerking is voltooid. Gebruik asynchrone I/O-bewerkingen bij het ontwikkelen van Windows 8.x Store-apps om te voorkomen dat de indruk wordt gemaakt dat uw app niet meer werkt.

De asynchrone leden bevatten Async in hun namen, zoals de CopyToAsync, FlushAsync, ReadAsync, en WriteAsync methoden. U gebruikt deze methoden met de async en await trefwoorden.

Zie Asynchrone bestands-I/O voor meer informatie.

Compressie

Compressie verwijst naar het proces van het verkleinen van de grootte van een bestand voor opslag. Decompressie is het proces van het extraheren van de inhoud van een gecomprimeerd bestand, zodat ze zich in een bruikbare indeling bevinden. De System.IO.Compression naamruimte bevat typen voor het comprimeren en decomprimeren van bestanden en streams.

De volgende klassen worden vaak gebruikt bij het comprimeren en decomprimeren van bestanden en streams:

  • ZipArchive – voor het maken en ophalen van vermeldingen in het zip-archief.

  • ZipArchiveEntry – voor het weergeven van een gecomprimeerd bestand.

  • ZipFile – voor het maken, extraheren en openen van een gecomprimeerd pakket.

  • ZipFileExtensions – voor het maken en extraheren van vermeldingen in een gecomprimeerd pakket.

  • DeflateStream – voor het comprimeren en decomprimeren van streams met behulp van het algoritme Deflate.

  • GZipStream – voor het comprimeren en decomprimeren van streams in gzip-gegevensindeling.

Zie Procedure: Bestanden comprimeren en extraheren.

Geïsoleerde opslag

Geïsoleerde opslag is een mechanisme voor gegevensopslag dat isolatie en veiligheid biedt door gestandaardiseerde manieren te definiëren om code te koppelen aan opgeslagen gegevens. De opslag biedt een virtueel bestandssysteem dat is geïsoleerd door een gebruiker, assembly en (optioneel) domein. Geïsoleerde opslag is met name handig wanneer uw toepassing geen toegang heeft tot gebruikersbestanden. U kunt instellingen of bestanden voor uw toepassing opslaan op een manier die wordt beheerd door het beveiligingsbeleid van de computer.

Geïsoleerde opslag is niet beschikbaar voor Windows 8.x Store-apps; Gebruik in plaats daarvan toepassingsgegevensklassen in de Windows.Storage naamruimte. Zie Toepassingsgegevens voor meer informatie.

De volgende klassen worden vaak gebruikt bij het implementeren van geïsoleerde opslag:

Zie Geïsoleerde opslag.

I/O-bewerkingen in Windows Store-apps

.NET voor Windows 8.x Store-apps bevat veel van de typen voor het lezen van en schrijven naar streams; Deze set bevat echter niet alle .NET I/O-typen.

Enkele belangrijke verschillen bij het gebruik van I/O-bewerkingen in Windows 8.x Store-apps:

U kunt indien nodig converteren tussen .NET Framework-streams en Windows Runtime-streams. Zie Procedure: Converteren tussen .NET Framework-streams en Windows Runtime-streams of WindowsRuntimeStreamExtensionsvoor meer informatie.

Zie quickstart: Bestanden lezen en schrijven voor meer informatie over I/O-bewerkingen in een Windows 8.x Store-app.

I/O en beveiliging

Wanneer u de klassen in de System.IO naamruimte gebruikt, moet u voldoen aan de beveiligingsvereisten van het besturingssysteem, zoals toegangsbeheerlijsten (ACL's) om de toegang tot bestanden en mappen te beheren. Deze vereiste is naast eventuele FileIOPermission vereisten. U kunt ACL's programmatisch beheren. Zie Instructies voor het toevoegen of verwijderen van vermeldingen in toegangsbeheerlijsten voor meer informatie.

Standaardbeveiligingsbeleid voorkomt dat internet- of intranettoepassingen toegang hebben tot bestanden op de computer van de gebruiker. Gebruik daarom niet de I/O-klassen waarvoor een pad naar een fysiek bestand is vereist bij het schrijven van code die via internet of intranet wordt gedownload. Gebruik in plaats daarvan geïsoleerde opslag voor .NET-toepassingen.

Er wordt alleen een beveiligingscontrole uitgevoerd wanneer de stream is samengesteld. Open daarom geen stream en geef deze vervolgens door aan minder vertrouwde code of toepassingsdomeinen.

  • Algemene I/O-taken
    Bevat een lijst met I/O-taken die zijn gekoppeld aan bestanden, mappen en streams, en koppelingen naar relevante inhoud en voorbeelden voor elke taak.

  • Asynchrone bestands-I/O
    Beschrijft de prestatievoordelen en de basisbewerking van asynchrone I/O.

  • Geïsoleerde opslag
    Beschrijft een mechanisme voor gegevensopslag dat isolatie en veiligheid biedt door gestandaardiseerde manieren te definiëren om code te koppelen aan opgeslagen gegevens.

  • Pijpen
    Beschrijft anonieme en benoemde pijpbewerkingen in .NET.

  • Memory-Mapped-bestanden
    Beschrijft geheugen-gekopieerde bestanden, die de inhoud van bestanden op schijf in virtueel geheugen bevatten. U kunt geheugen-geïndexeerde bestanden gebruiken om zeer grote bestanden te bewerken en om gedeeld geheugen te creëren voor communicatie tussen processen.