Filhantering Grundprincipen för filhantering Öppna filen Gör nå’t (läs eller skriv) Stäng filen
Datafiler Filer kan innehålla Ren text (ex källkodsfiler) Formaterad text (ex .doc-filer) Binärdata (binär information, .exe-filer)
C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer ”inström” Inströmmar används för att “läsa” data Program Källa, Ex tangentbord ”utström” Utströmmar används för att “skriva” data Program Destination, ex. fil på hårddisk
Dataströmmar Hårddisk Processor Utenhet In- och utenhet Inenhet 101010101 Hårddisk 101010101 Processor 101010101 In- och utenhet 101010101 Inenhet
C# I/O Streams Kommunikationskanalen kan vara en nätverkslänk, en minnesbuffert, en fil eller en användarterminal Det spelar ingen roll varifrån informationen kommer, eller vilken typ av data som läses eller skrivs, algoritmerna blir ändå i stort desamma Därför kan strömmarna användas med likartade metoder
System.IO Denna namnrymnd innehåller klasser för dataströmmar till och från filer och vanligen till vår bildskärm (klassen Console) . Även dataströmmar kan vi se som ”filer”, dvs måste öppnas och stängas…
System.IO Denna namnrymd innehåller klasser för dataströmmar till och från filer, strängar och minne. Klasserna kan indelas i tre kategorier: För hantering av filer och kataloger Directory- och File klasser För läsning/skrivning av bytevärden Stream-klasser För läsning/skrivning av text Reader/Writer-klasser
Att skriva till en textfil Öppna StreamWriter utfil = new StreamWriter("Testa.txt"); utfil.Write("Du kan använda samma metoder här "); utfil.WriteLine("som mot 'Console.Out', ex 'WriteLine'!"); utfil.Close(); Skriv Stäng
Att läsa från en textfil Öppna StreamReader infil = new StreamReader("Testa.txt"); while (true) { string line = infil.ReadLine(); if (line == null) break; Console.WriteLine(line); } infil.Close(); Läs Stäng
End-Of-File (EOF) Från en sekventiell fil läses allt i ”tur och ordning”, exempelvis rad efter rad, eller post efter post. När läsningen sker och det inte längre finns något kvar att läsa in från filen uppstår EOF. Hur EOF hanteras varierar mycket mellan olika språk och utvecklingsmiljöer. Ett vanligt sätt är att en ”statusflagga” blir satt, som vi kan testa om den är ”true” eller ”false”. I C# ser vi att vi kommit till EOF genom att resultatet av inläsningen blir null.
Vad händer om vi fortsätter efter EOF? Även detta varierar mycket mellan olika språk och utvecklingsmiljöer. Några vanliga beteenden: Ett felmeddelande ges (exempelvis att ett Exception kastas) Den sista posten bearbetas igen och igen och igen…
Read-ahead I miljöer där en statusflagga används för EOF, brukar detta kombineras med Read-Ahead, dvs att det sker en läsning från filen innan loopen börjar, men som inte flyttar punkten för nästa inläsning. Därigenom vet vi om det finns något att läsa in, och kan använda det i vår loop. Exempel, om vi använt en sådan filtyp: while ( !infil.EOF ) { string line = infil.ReadLine(); Console.WriteLine(line); }