Streams i .NET

Tags:    .net
Skrevet af Bruger #4522 @ 20.04.2008

FileStream


FileStream er nok den mest brugte lager-stream klasse. Som navnet antyder bruges den til at skrive til og læse fra filer, men den kan også anvendes på visse standard OS "håndtag" såsom standard intput og standard output.

Når du bruger klassens konstruktør til at skabe et FileStream objekt, kan du specificere en del forskellig information om den ønskede fil, men som minimum skal du angive en filsti og en værdi fra FileMode-enum.

FileMode har følgende medlemmer:


  • Append: En ny fil oprettes, eller den allerede eksisterende åbnes. Positionen er sat til filens ende -hvorfor der ikke kan læses.

  • Create: En ny fil oprettes - hvis der allerede eksisterer en fil med det angivne navn overskrives den.

  • CreateNew: Der oprettes en ny fil - hvis der allerede eksisterer en fil med det angivne navn kastes en undtagelse.

  • Open: Åbner en allerede eksisterende fil - hvis der ikke findes en fil med det angivne navn kastes en undtagelse.

  • OpenOrCreate: Hvis der allerede findes en fil med det angivne navn åbnes den, ellers oprettes en ny.

  • Truncate: Åbner en allerede eksisterende fil og sletter dens indhold.


Så vi kan lave et FileStream-objekt sådan her:

Fold kodeboks ind/udKode 


Når vi opretter et FileStream-objekt kan vi også angive hvilke filrettigheder der skal være tilknyttet. Dette gøres via FileAccess-enum:


  • Read: Der kan kun læses fra filstrømmen.

  • Write: Der kan kun skrives til filstrømmen.

  • ReadWrite: Der kan både læses og skrives til filstrømmen.



Vi kan f.eks. oprette en filstrøm der kun har læserettigheder på denne måde:

Fold kodeboks ind/udKode 


Hvis din fil skal deles mellem flere processer (eller ikke må deles), skal du angive hvilke dele-rettigheder der er tilknyttet filen når du opretter filstrømmen. Dette gøres med et medlem fra FileShare-enum:


  • None: Filen kan ikke deles. Hverken af andre processer eller af denne - så filen kan ikke åbnes af andre før den er lukket.

  • Read: Filen kan åbnes af andre med det formål at læse fra den.

  • Write: Filen kan åbnes af andre med det formål at skrive til den.

  • ReadWrite: Filen kan åbnes af andre med det formål

  • Delete: Filen kan slettes efterfølgende.

  • Inheritable: En børneprocess kan arve filhåndtaget.



Så hvis vi ikke ønsker at andre skal kunne åbne vores fil førend vi er færdige med den, kan vi gøre følgende:

Fold kodeboks ind/udKode 


Du kan også angive en ønskede størrelse på en buffer. Argumentet til konstruktøren er bufferens størrelse i byte. Så hvis vi arbejder videre med de forrige eksempler, specificerer vi her en buffer på 2000 bytes:

Fold kodeboks ind/udKode 


Som udgangspunkt oprettes vores FileStream med understøttelse af synkron I/O. Vi kan med en boolsk værdi angive at vi ønsker asynkron I/O. Hvis vi angiver true som værdi for parameteren bool isAsync får vi asynkron I/O:

Fold kodeboks ind/udKode 


Her er en oversigt over konstruktørerne i FileStream-klassen:



Vi har ikke diskuteret alle konstruktørerne - men der kan læses mere om dem her: FileStream Constructor.


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (2)

User
Bruger #6559 @ 20.04.08 11:17
En meget god artikel. Jeg synes at når du begynder at skrive om MemoryStream, så er det synd du ikke går mere i dybden med det når du alligevel begynder at fortælle lidt om klassen. Der burde du måske bare have undværet det helt og så skrevet i starten at det ikke var med i artiklen. Ellers faldt jeg ikke over det helt store. Godt beskrivende og helt sikkert noget jeg kommer til at bruge. Keep up the good work :)
User
Bruger #4522 @ 20.04.08 15:54
Tak for dine kommentarer Martin. Du har en pointe omkring MemoryStream og jeg vil prøve at uddybe det lidt mere i artiklen.
Du skal være logget ind for at skrive en kommentar.
t