120 likes | 338 Views
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.
E N D
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 Utenhet 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); }