1 / 16

Filer

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.

Download Presentation

Filer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Filer – intro Variable og arrays tilbyder temporær opbevaring af data Filer & databaser tilbyder varig / persistentopbevaring af data

  3. 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

  4. 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

  5. Klasserne File og Directory, 1 Klasserne File og Directorygiver mulighed for at manipulere med filer og mapper

  6. Klasserne File og Directory, 2

  7. 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

  8. 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

  9. Kan skippes efter behov • Eksemplet SearchingDirectorieswith LINQ s. 715n – 720ø • Eksemplet benytter LINQ (kan læses i kap. 9)

  10. 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

  11. 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

  12. 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

  13. Kan skippes efter behov • Afsnit 17.7 Case Study: Credit Inquiry Program s. 733n – 739m • Eksemplet benytter reposition af file-position pointer

  14. 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

  15. Ø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

  16. 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)

More Related