160 likes | 291 Views
Filer. Filer - intro Data-hierarki Filer og strømme (eng.: streams ) af bytes Klasserne File og Directory Oprettelse af sekventiel tekstfil Læsning af data fra sekventiel tekstfil Serialization & deserialization (kun overordnet) Steen Jensen , efterår 2013. Filer – intro.
E N D
Filer • Filer - intro • Data-hierarki • Filer og strømme (eng.: streams) af bytes • Klasserne File og Directory • Oprettelse af sekventiel tekstfil • Læsning af data fra sekventiel tekstfil • Serialization & deserialization (kun overordnet) • Steen Jensen, efterår 2013
Filer – intro Variable og arrays tilbyder temporær opbevaring af data Filer & databaser tilbyder varig / persistentopbevaring af data
Data-hierarki For at kunne hente specifikke records vælges en recordkey i hver record En typisk måde at organisere filer på er som en sekventiel filsorteret efter recordkey
Filer og strømme (eng.: streams) af bytes • NamespaceSystem.IOinkluderer streamclasses såsom: • StreamReader (tekst input fra fil) • StreamWriter(tekst output til fil) C# ser hver fil som en strøm af bytes Enend-of-file marker angiver afslutningen på filen
Klasserne File og Directory, 1 Klasserne File og Directorygiver mulighed for at manipulere med filer og mapper
Eksempel på brug af klasserne File og Directory(figur 17.5 s. 713), 1 • Eksemplet udskriver enten indholdet af en tekstfileller lister filnavne i en mappe, afhængig af, om der indtastes et filnavn eller et mappenavn • Eksemplet bruger GUI (gennemgås først i kap. 14), men her er nogle få bemærkninger: • Linje 10: partialclass - se s. 559 i bogen (= en klasse opdelt i flere filer, der samles til en enkelt klasse af compileren) • Linje 19: eventhandler til tekstboks – se s. 562 i bogen
Eksempel på brug af klasserne File og Directory(figur 17.5 s. 713), 2 • Linje 19-75: metoden inputTextBox_KeyDownkaldes, hver gang der indtastes et tegn i tekstboksen • Linje 22: undersøger, om brugeren har trykket Enter • Hvis Enter, undersøges om der er indtastet et filnavn (linje 28) • Hvis filnavn indtastet, udskrives indholdet af tekstfilen • Hvis ikke filnavn indtastet, undersøges, om der er indtastet et mappenavn • Hvis mappenavn indtastet, udskrives alle filnavne i mappen • Hvis ikke mappenavn indtastet, udskrives en fejlmeddelelse • Hvis ikke Enter, gøres ingenting • Linje 38: klassen StreamReaderbenyttes til at læse fra tekstfil • Linje 40: metode ReadToEndlæser hele indholdet af tekstfil som en streng • Linje 59: metode GetDirectories henter indhold af mappe som et array
Kan skippes efter behov • Eksemplet SearchingDirectorieswith LINQ s. 715n – 720ø • Eksemplet benytter LINQ (kan læses i kap. 9)
Eksempel på oprettelse af sekventiel tekstfil (figur 17.7, 17.8, 17.9 s. 720 ), 1 • Eksemplet kan oprette records med bankoplysninger (kontonr, fornavn, eftrnavn, saldo) i en tekstfil • Eksemplet benytter tre klasser – BankUIForm(GUI, fig. 17.7), Record(til opbevaring af bank-record, fig. 17.8), CreateFileForm(skriver til tekstfil, fig. 17.9) • Hovedvægt vil blive lagt på fig. 17.8 + 17.9 – i stedet for GUI kan simple WriteLine + ReadLine benyttes • Figur 17.8 linje 21-24 + 27-34: overloadedconstructor til henholdsvis startværdier og overførte parameterværdier
Eksempel på oprettelse af sekventiel tekstfil (figur 17.7, 17.8, 17.9 s. 720 ), 2 • Figur 17.9: • Linje 12: klassen StreamWriter benyttes til at skrive til tekstfil • Linje 25: filnavnet gemmes i variablen fileName • Linje 44-56: try – opret nyt objekt af typen FileStreamog angiv FileModetil Openeller Create, og FileAccesstil Write • Linje 58-63: catch – IOException • Linje 69-126: eventhandler til enter-knap • Linje 75: opret objekt af klassen Record • Linje 100-102 try– skriv record i tekstfil med metoden WriteLine • Linje 112-116: catch - IOException • Linje 118-122: catch – FormatException • Linje 129-148: eventhandler til exit-knap • Linje 134-138: try - luk tekstfil med metoden Close • Linje 140-144: catch – IOException • Linje 147: afbryd app med metoden Exit
Eksempel på læsning af data fra sekventiel tekstfil (figur 17.11 s. 729) • Eksemplet læser tekstfilen oprettet i eksempel 17.7-17.9 • Hovedvægt vil blive lagt på filbehandling og ikke så meget GUI • Linje 12: klassen StreamReaderbenyttes til at læse fra tekstfil • Linje 25: filnavnet gemmes i variablen fileName • Linje 44-55: try – opret nyt objekt af typen FileStream og angiv FileMode til Open, og FileAccess til Read. Der oprettes et nyt objekt af typen StreamReader • Linje 56-61: catch – IOException • Linje 67-105: eventhandler til next-knap • Linje 69-99 try – læs næste recordfra tekstfil med metoden ReadLine eller luk tekstfil (ved EOF) med metoden Close • Linje 100-104: catch - IOException
Kan skippes efter behov • Afsnit 17.7 Case Study: Credit Inquiry Program s. 733n – 739m • Eksemplet benytter reposition af file-position pointer
Serialization & deserialization • Gennemgås kun overordnether • Nogle gange ville det være nemmere at læse eller skrive hele objekter • C# indeholder en mekanisme, der hedder objectserialization, som betyder, at et objekt repræsenteres som en sekvens af bytes, som inkluderer både objektets data og typen af data gemt i objektet • Efter et serialized objekt er blevet skrevet til en fil, kan det læses fra filen og gøres deserialized– kan sammenligned med kryptering/dekryptering • NamespaceSystem.Runtime.Serialization.Formatters.Binaryindeholder klassen BinaryFormatter med følgende metoder: • Serialize– kan skrive et objekt som et serialized objekt • Deserialize– læser repræsentationen fra fil og rekonstruerer det originale objekt • Læs/studer efter behov selv fig. 17.13 s. 740 + fig. 17.15 s. 745
Øvelser filer – i klassen Prøv at besvare øvelse 17.1 + 17.2 s. 750 uden at se svaret Check derefter dine svar op imod svarene s. 751
Programmeringsøvelser – filer • Resten af dagen + fortsæt hjemme: • Ex. 17.3 s. 751 • Ex. 17.8 s. 752 (NB! I stedet for GUI kan simple WriteLine & ReadLine benyttes • Implementer brug af filer i Spejdersystemet (til katalogerne)