15
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:
// Her opretter vi et FileStream objekt ved at angive en filsti og en værdi fra enum FileMode
FileStream fs = new FileStream(@"C:\\plan.txt", FileMode.Open);
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:
// Her opretter vi et FileStream objekt ved at angive en filsti, en værdi fra enum FileMode
// og en værdi fra enum FileAccess
FileStream fs = new FileStream(@"C:\\plan.txt", FileMode.Open, FileAccess.Read);
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:
// Her opretter vi et FileStream objekt ved at angive en filsti, en værdi fra enum FileMode,
// en værdi fra enum FileAccess og en værdi fra enum FileShare
FileStream fs = new FileStream(@"C:\\plan.txt", FileMode.Open, FileAccess.Read,
FileShare.None);
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:
// Her opretter vi et FileStream objekt ved at angive en filsti, en værdi fra enum FileMode,
// en værdi fra enum FileAccess, en værdi fra enum FileShare og en buffer på 2000 bytes
FileStream fs = new FileStream(@"C:\\plan.txt", FileMode.Open, FileAccess.Read,
FileShare.None, 2000);
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:
// Her opretter vi et FileStream objekt ved at angive en filsti, en værdi fra enum FileMode,
// en værdi fra enum FileAccess, en værdi fra enum FileShare, en buffer på 2000 bytes og
// med understøttelse af asynkront I/O
FileStream fs = new FileStream(@"C:\\plan.txt", FileMode.Open, FileAccess.Read,
FileShare.None, 2000, true);
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)
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
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.