SlideShare une entreprise Scribd logo
1  sur  51
Dateien lesen, schreiben und verarbeiten




C# Workshop, TU Darmstadt 2008,
Präsentation von Qiong Wu (Microsoft Junior Student Partner)
   Input / Output
     Zugriff auf Dateien und Ordner
     Arbeiten mit Byte Streams
     Reader und Writer Klassen verwenden
     Komprimieren und Dekomprimieren von Daten
     Isolated Storage
Output



  Input
Application   Output
Application   Input
   System.IO Namespace
     Informelle Klassen
      ▪ FileSystemInfo
        ▪ FileInfo
        ▪ DirectoryInfo
      ▪ DriveInfo
     Manipulierende Klassen
      ▪ File
      ▪ Directory
      ▪ Path
   Bietet Zugriff auf Informationen von Dateien
    und Ordnern
   Basisklasse für FileInfo und DirectoryInfo
   Bietet Zugriff auf Informationen von Dateien
FileInfo deklarieren            Dateipfad


FileInfo NewFile = new FileInfo(@quot;C:NewTextFile.txtquot;);

if (NewFile.Exists)              Existiert die Datei?
{
   Console.WriteLine(quot;Name: quot; + NewFile.Name);
   Console.WriteLine(quot;Fullname: quot; + NewFile.FullName);
   Console.WriteLine(quot;Size: quot; + NewFile.Length + quot; bytesquot;);
}



                                               Attribute abfragen
FileInfo deklarieren               Dateipfad


FileInfo NewFile = new FileInfo(@quot;C:NewTextFile.txtquot;);

if (NewFile.Exists)              Existiert die Datei?
{
    NewFile.CopyTo(@quot;C:NewTextFileCopy.txtquot;, true);

}

                       Überschreiben
                      wenn Datei bereits
                         vorhanden         Datei kopieren
   Bietet
     Zugriff auf Informationen von Ordnern
     Auflistung von Ordnerinhalten
     Elementaren Zugriff auf Ordner
DirectoryInfo deklarieren         Ordnerpfad


  DirectoryInfo ourDir = new DirectoryInfo(@quot;C:windowsquot;);

  Console.WriteLine(quot;Directory: quot; + ourDir.FullName);

  foreach (FileInfo file in ourDir.GetFiles())            Attribute
  {                                                       abfragen
      Console.WriteLine(quot;File: quot; + file.Name);
  }




Ordnerinhalt
enumerieren
   Bietet
     Zugriff auf Informationen von Laufwerken
      ▪ Speicherplatz
      ▪ Format
      ▪ Laufwerkstyp
      ▪ Name
      ▪ Status
   Erbt nicht von FileSystemInfo
Laufwerke
                              abrufen
DriveInfo[] drives = DriveInfo.GetDrives();

foreach (DriveInfo drive in drives)
{
    Console.WriteLine(quot;Drive: quot; + drive.Name);
    Console.WriteLine(quot;Type: quot; + drive.DriveType);
    if (drive.IsReady)
    {
    Console.WriteLine(quot;Free Space: quot; + drive.AvailableFreeSpace +
   quot; bytesquot;);
    }
}
       Attribute
       abfragen
   Bietet Zugriff auf Pfadmanipulationen
   Größtenteils oft benutzte
    Stringmanipulationen für Dateipfade
   Path.Combine für Plattformunabhängigkeit
    wichtig!
2 Pfade kombinieren

Console.WriteLine(Path.Combine(quot;C:Windowsquot;,
   quot;System32rundll.exequot;));

Console.WriteLine(Path.GetExtension(Path.Combine(quot;C:Windowsquot;,
   quot;System32rundll.exequot;)));
                                                Dateierweiterung
                                                    abfragen
   Auf Veränderungen im Dateisystem reagieren
   FileSystemWatcher
     Enable/disable
     Filter Events
   Auf Events registrieren
       Changed
       Created
       Deleted
       Renamed
FileSystemWatcher
static void FileSystemWatcherTest()                  deklarieren
 {
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = @quot;c:quot;;
                                             Zu überwachendes Verzeichnis
    watcher.Created   +=   new   FileSystemEventHandler(watcher_Changed);
    watcher.Renamed   +=   new   RenamedEventHandler(watcher_Changed);
    watcher.Deleted   +=   new   FileSystemEventHandler(watcher_Changed);
    watcher.Changed   +=   new   FileSystemEventHandler(watcher_Changed);

    watcher.EnableRaisingEvents = true;                                     Auf Events
}
                                                 Eventauslösung
                                                   aktivieren               registrieren
static void watcher_Changed(object sender, FileSystemEventArgs e)
{
    Console.WriteLine(quot;Directory changed(quot; + e.ChangeType + quot;): quot; + e.FullPath);
}
                                   Auf Änderungen
                                      reagieren
   Zugriff auf Datenströme
   Stream Objekt
     Stream Klassen
      ▪ MemoryStream
      ▪ CryptoStream
      ▪ NetworkStream
      ▪ GZipStream
   Zugriff über StreamWriter / StreamReader
   Zugriff auf Streams wie
    auf ein Videoband
   Abstraktion für
    sequentielle
    Datenvorgänge
   FileStream Objekt erstellen
   Zu öffnende Datei bestimmen
     mit Konstruktor
     mit File.Open
   FileMode festlegen
     Öffnen
     Schreiben
      ▪ Erstellen
      ▪ Anhängen
   statische Methoden für
     Erzeugung von Datenstreams
      ▪ FileAccess
      ▪ FileMode
     Einfache Dateimanipulation
      ▪ Kopieren
      ▪ Löschen
      ▪ Existenz prüfen
      ▪ Größe
      ▪ Etc.
   Statische Methoden für
     Erzeugung von Verzeichnissen
     Verändern von Verzeichnissen
     Löschen von Verzeichnissen
     Abfragen von Verzeichnisattributen
   Schreiben / Lesen von Text in einen
    beliebigen Stream
     Zeichen
     Zeile
     Absatz
     Bis zum Ende
   Übergabe eines Stream Objekts
   Benutzung wie Console
   Gesamten Inhalt auslesen mit ReadToEnd()
Datei erstellen mit File
         StreamWriter deklarieren                  Klasse

StreamWriter Tex;
Tex = File.CreateText(quot;C:NewTextFile.txtquot;);
                                                          Wert schreiben
Tex.WriteLine(quot;Hello World with StreamWriterquot;);
Console.WriteLine(quot;File with name: quot; +
   ((FileStream)Tex.BaseStream).Name + quot; was written succesfullyquot;);
Tex.Close();


                               BasisStream abfragen



StreamWriter schließen
StreamReader deklarieren

          StreamReader re;
          re = File.OpenText(quot;C:NewTextFile.txtquot;);
          Console.WriteLine(re.ReadToEnd());
          re.Close();
                                                Datei öffnen mit File Klasse
StreamReader schließen


                         Inhalte der Datei ausgeben
   Schreiben / Lesen von binären Daten in einen
    beliebigen Stream
   Gleiches Handling wie StreamWriter / Reader
FileStream erstellen


FileStream BinaryStream = File.Create(@quot;C:NewBinary.binquot;);

BinaryWriter bTex = new BinaryWriter(BinaryStream);

bTex.Write(quot;this is binaryquot;);                    BinaryWriter mit
bTex.Write(true);                                     Stream
bTex.Write('4');                                   initialisieren

bTex.Close();

                                      Daten in
    Stream schließen                  Stream
                                     schreiben
FileStream erstellen

     FileStream newFile =
        File.Open(@quot;C:NewBinary.binquot;, FileMode.Open);

     BinaryReader reader = new BinaryReader(newFile);

     string s = reader.ReadString();                BinaryReader mit
     bool b = reader.ReadBoolean();                      Stream
     char c = reader.ReadChar();                      initialisieren

     reader.Close();


                                        Daten aus
              Stream schließen
                                         Stream
                                          lesen
   Warum
     Schreiben auf Festplatte oft inperfomant
     Kein Erstellen von temporären Dateien erwünscht
   Benutzbar mit StreamWriter / Reader
   Handling wie FileStream
MemoryStream memStrm = new MemoryStream();
MemoryStream deklarieren
            StreamWriter writer = new StreamWriter(memStrm);
            writer.WriteLine(quot;Helloquot;);
            writer.WriteLine(quot;Goodbyequot;);
  Daten
                                 Schreiben     Stream an Writer übergeben
schreiben   writer.Flush();
                                 erzwingen
            FileStream theFile = File.Create(@quot;c:inmemory.txtquot;);

            memStrm.WriteTo(theFile);
                                                 Stream in
            writer.Close();                        Datei
            theFile.Close();                     schreiben
            memStrm.Close();
   Warum
     FileStream schreibt direkt auf Festplatte
      ▪ Inperfomant
     Hybride Mischung aus MemoryStream &
     FileStream
   Kompatibel mit StreamWriter / Reader
   Handling wie FileStream
FileStream
   erstellen

FileStream newFile = File.Create(@quot;c:test.txtquot;);

BufferedStream buffered = new BufferedStream(newFile);
StreamWriter writer = new StreamWriter(buffered);
writer.WriteLine(quot;Some dataquot;);
                                                    FileStream
writer.Close();
                                                       übergeben


 BufferedStream
   deklarieren
                                    StreamWriter mit
                                     BufferedStream
                                        erstellen
   Speichern von Rohdaten benötigt viel Platz
   Kompression – ein wichtiges Feld der
    Informatik
     Durch Kompression wird mehr Bandbreite
      ermöglicht als durch Hardwareoptimierung
     Digitales Zeitalter setzt auf Kompression
   Eingebaute Kompression in C#
     DeflateStream
     GZipStream
   NameSpace: System.IO.Compression
   Gleicher Kompressionsalgorithmus
   Ähnlicher Umgang
   GZipStream
     Header mit zusätzlichen Informationen
      ▪ Bessere Kompatibilität
     Für Verteilung von Komprimierten Daten
     Arbeit auf mehreren Platformen
   DeflateStream
     verzichtet auf zusätzliche Informationen
      ▪ Geringerer Speicherverbrauch
     Single System Kompression
   Handling wie FileStream
   Wrapping um bestehenden FileStream
   CompressionMode Enum als
    Konstrukturargument
FileStreams
FileStream sourceFile = File.OpenRead(@quot;c:test.txtquot;);         erstellen
FileStream destFile = File.Create(@quot;c:test.zipquot;);

GZipStream GZipStream =
            new GZipStream(destFile, CompressionMode.Compress);

int theByte = sourceFile.ReadByte();
while (theByte != -1)                                    GZipStream um
{                                                          FileStream
    GZipStream.WriteByte((byte)theByte);                    wrappen
    theByte = sourceFile.ReadByte();
}

GZipStream.Close();
sourceFile.Close();                     Daten
destFile.Close();                     schreiben
FileStream sourceFile = File.OpenRead(@quot;c:test.zipquot;);
FileStream destFile = File.Create(@quot;c:test.txtquot;);
GZipStream compStream =
            new GZipStream(sourceFile,
   CompressionMode.Decompress);

int theByte = compStream.ReadByte();
while (theByte != -1)
{
    destFile.WriteByte((byte)theByte);
    theByte = compStream.ReadByte();
}

compStream.Close();
destFile.Close();
sourceFile.Close();
   SharpZipLib
     Tar
     GZIP
     ZIP
     BZIP2
   OpenFileDialog
   SaveFileDialog
OpenFileDialog
        deklarieren

OpenFileDialog NewFileDialog = new OpenFileDialog();
NewFileDialog.Filter = quot;Textdateien (*.txt)|*.txt|Alle Dateien
   (*.*)|*.*quot;;

if (NewFileDialog.ShowDialog() == DialogResult.OK)         Filter festlegen
{
    string s = NewFileDialog.FileName;
    MessageBox.Show(s);
}

                        Dateinamen       Result abfragen
                         abfragen
SaveFileDialog
        deklarieren

SaveFileDialog NewFileDialog = new SaveFileDialog();
NewFileDialog.Filter = quot;Textdateien (*.txt)|*.txt|Alle Dateien
   (*.*)|*.*quot;;

if (NewFileDialog.ShowDialog() == DialogResult.OK)         Filter festlegen
{
    string s = NewFileDialog.FileName;
    MessageBox.Show(s);
}
                                         Result abfragen
                        Dateinamen
                         abfragen
   Warum
     Direkter Zugriff auf das Dateisystem birgt Risiken
     SandBox Konzept bietet optimalen Tradeoff
     zwischen Sicherheit und Funktion
   IsolatedStorageFile Klasse
   Erstellung eines Stores
   NameSpace: System.IO.IsolatedStorage
   Scope definiert den Kontext des Stores
     Assembly / Machine
      ▪ Spezifiziert für die Maschine / Assembly
      ▪ Anwendungsdaten
      ▪ GetMachineStoreForAssembly()
     Assembly / User
      ▪ Spezifiziert für die Assembly / User
      ▪ Userbezogene Daten
      ▪ GetUserStoreForAssembly()
   Wie FileStream aber
     Speziell um Dateien aus Isolated Storage zu lesen
   Kompatibel mit StreamReader / Writer
Isolated Storage
                                          anfordern

IsolatedStorageFile userStore =
   IsolatedStorageFile.GetUserStoreForAssembly();    Isolated FileStream
                                                           erstellen
IsolatedStorageFileStream userStream = new
   IsolatedStorageFileStream(quot;UserSettings.setquot;, FileMode.Create,
   userStore);

StreamWriter userWriter = new StreamWriter(userStream);
userWriter.WriteLine(quot;User Prefsquot;);
userWriter.Close();



                                                 Daten in Stream
                                                    schreiben
   Isolated Storage ist wie ein virtuelles
    Laufwerk
     Ordnerstruktur
     Dateistruktur
   Abrufen von Ordnerliste mit
    GetDirectoryNames()
   Abrufen von Dateiliste mit GetFileNames()
Isolated Storage
                        anfordern


IsolatedStorageFile userStore =
   IsolatedStorageFile.GetUserStoreForAssembly();

foreach (string isofilename in userStore.GetFileNames(quot;*quot;))
{
    MessageBox.Show(isofilename);
}


                                                    Dateien abrufen
   Wir haben gelernt
     Umgang mit Dateien
       ▪ Datei / Ordner / Laufwerksinformationen abfragen
       ▪ Änderungen in der Ordnerstruktur überwachen
       ▪ Streams aus Dateien erstellen
     Umgang mit Streams
       ▪ Dateien bearbeiten mit FileStream
       ▪ Speicher schreiben / lesen mit MemoryStream
       ▪ Effizient Dateien schreiben mit BufferedStream
       ▪ Schreiben und Lesen mit StreamWriter / Reader
       ▪ Komprimierung mit GZipStream / DeflateStream
     FileDialoge
       ▪ Abfragen von Speicherorten
     Isolated Storage
       ▪ Sandboxfunktionen des .net Frameworks nutzen
C# Workshop - File Operations

Contenu connexe

Similaire à C# Workshop - File Operations

Apple iOS - Daten
Apple iOS - DatenApple iOS - Daten
Apple iOS - Datenmesseb
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashStephan Schmidt
 
Oracle Datenbank-Architektur
Oracle Datenbank-ArchitekturOracle Datenbank-Architektur
Oracle Datenbank-ArchitekturMarkus Flechtner
 
Interprozesskommunikation mit PHP
Interprozesskommunikation mit PHPInterprozesskommunikation mit PHP
Interprozesskommunikation mit PHPStephan Schmidt
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
HTML5 Storage
HTML5 StorageHTML5 Storage
HTML5 Storageadesso AG
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershellCreasoft AG
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondUlrich Krause
 
Web 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryWeb 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryStephan Schmidt
 
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...OPITZ CONSULTING Deutschland
 
Why websecurity sucks
Why websecurity sucksWhy websecurity sucks
Why websecurity sucksThaDafinser
 
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...Karionis
 
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsFMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsVerein FM Konferenz
 

Similaire à C# Workshop - File Operations (20)

Apple iOS - Daten
Apple iOS - DatenApple iOS - Daten
Apple iOS - Daten
 
FLOW3-Workshop F3X12
FLOW3-Workshop F3X12FLOW3-Workshop F3X12
FLOW3-Workshop F3X12
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
 
Oracle Datenbank-Architektur
Oracle Datenbank-ArchitekturOracle Datenbank-Architektur
Oracle Datenbank-Architektur
 
Interprozesskommunikation mit PHP
Interprozesskommunikation mit PHPInterprozesskommunikation mit PHP
Interprozesskommunikation mit PHP
 
Windows Powershell
Windows PowershellWindows Powershell
Windows Powershell
 
Typo3 und Varnish
Typo3 und VarnishTypo3 und Varnish
Typo3 und Varnish
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
Fly2pdf
Fly2pdfFly2pdf
Fly2pdf
 
HTML5 Storage
HTML5 StorageHTML5 Storage
HTML5 Storage
 
Workshop: Besseres C#
Workshop: Besseres C#Workshop: Besseres C#
Workshop: Besseres C#
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
 
Fly2pdf
Fly2pdfFly2pdf
Fly2pdf
 
Interaktives Web
Interaktives WebInteraktives Web
Interaktives Web
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
Web 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface LibraryWeb 2.0 Mit Der Yahoo User Interface Library
Web 2.0 Mit Der Yahoo User Interface Library
 
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
Wiederherstellung von Daten im Rechenzentrum - OPITZ CONSULTING - Andreas Rei...
 
Why websecurity sucks
Why websecurity sucksWhy websecurity sucks
Why websecurity sucks
 
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
 
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsFMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
 

Plus de Qiong Wu

node.js workshop- node.js databases
node.js workshop- node.js databasesnode.js workshop- node.js databases
node.js workshop- node.js databasesQiong Wu
 
node.js workshop- node.js unit testing
node.js workshop- node.js unit testingnode.js workshop- node.js unit testing
node.js workshop- node.js unit testingQiong Wu
 
node.js workshop- node.js middleware
node.js workshop- node.js middlewarenode.js workshop- node.js middleware
node.js workshop- node.js middlewareQiong Wu
 
node.js workshop- node.js basics
node.js workshop- node.js basicsnode.js workshop- node.js basics
node.js workshop- node.js basicsQiong Wu
 
node.js workshop- JavaScript Async
node.js workshop- JavaScript Asyncnode.js workshop- JavaScript Async
node.js workshop- JavaScript AsyncQiong Wu
 
node.js workshop- JavaScript Basics
node.js workshop- JavaScript Basicsnode.js workshop- JavaScript Basics
node.js workshop- JavaScript BasicsQiong Wu
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Qiong Wu
 
S N A I L Final Presentation
S N A I L    Final  PresentationS N A I L    Final  Presentation
S N A I L Final PresentationQiong Wu
 
3 Interop Part2
3 Interop Part23 Interop Part2
3 Interop Part2Qiong Wu
 
C# Workshop - Networking
C# Workshop - NetworkingC# Workshop - Networking
C# Workshop - NetworkingQiong Wu
 
C# Workshop - Threading
C# Workshop - ThreadingC# Workshop - Threading
C# Workshop - ThreadingQiong Wu
 
Life In Power Point
Life In Power PointLife In Power Point
Life In Power PointQiong Wu
 

Plus de Qiong Wu (14)

node.js workshop- node.js databases
node.js workshop- node.js databasesnode.js workshop- node.js databases
node.js workshop- node.js databases
 
node.js workshop- node.js unit testing
node.js workshop- node.js unit testingnode.js workshop- node.js unit testing
node.js workshop- node.js unit testing
 
node.js workshop- node.js middleware
node.js workshop- node.js middlewarenode.js workshop- node.js middleware
node.js workshop- node.js middleware
 
node.js workshop- node.js basics
node.js workshop- node.js basicsnode.js workshop- node.js basics
node.js workshop- node.js basics
 
node.js workshop- JavaScript Async
node.js workshop- JavaScript Asyncnode.js workshop- JavaScript Async
node.js workshop- JavaScript Async
 
node.js workshop- JavaScript Basics
node.js workshop- JavaScript Basicsnode.js workshop- JavaScript Basics
node.js workshop- JavaScript Basics
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0
 
S N A I L Final Presentation
S N A I L    Final  PresentationS N A I L    Final  Presentation
S N A I L Final Presentation
 
3 Interop Part2
3 Interop Part23 Interop Part2
3 Interop Part2
 
Kickoff
KickoffKickoff
Kickoff
 
2 Interop
2 Interop2 Interop
2 Interop
 
C# Workshop - Networking
C# Workshop - NetworkingC# Workshop - Networking
C# Workshop - Networking
 
C# Workshop - Threading
C# Workshop - ThreadingC# Workshop - Threading
C# Workshop - Threading
 
Life In Power Point
Life In Power PointLife In Power Point
Life In Power Point
 

C# Workshop - File Operations

  • 1. Dateien lesen, schreiben und verarbeiten C# Workshop, TU Darmstadt 2008, Präsentation von Qiong Wu (Microsoft Junior Student Partner)
  • 2. Input / Output  Zugriff auf Dateien und Ordner  Arbeiten mit Byte Streams  Reader und Writer Klassen verwenden  Komprimieren und Dekomprimieren von Daten  Isolated Storage
  • 4. Application Output
  • 5. Application Input
  • 6. System.IO Namespace  Informelle Klassen ▪ FileSystemInfo ▪ FileInfo ▪ DirectoryInfo ▪ DriveInfo  Manipulierende Klassen ▪ File ▪ Directory ▪ Path
  • 7. Bietet Zugriff auf Informationen von Dateien und Ordnern  Basisklasse für FileInfo und DirectoryInfo
  • 8. Bietet Zugriff auf Informationen von Dateien
  • 9. FileInfo deklarieren Dateipfad FileInfo NewFile = new FileInfo(@quot;C:NewTextFile.txtquot;); if (NewFile.Exists) Existiert die Datei? { Console.WriteLine(quot;Name: quot; + NewFile.Name); Console.WriteLine(quot;Fullname: quot; + NewFile.FullName); Console.WriteLine(quot;Size: quot; + NewFile.Length + quot; bytesquot;); } Attribute abfragen
  • 10. FileInfo deklarieren Dateipfad FileInfo NewFile = new FileInfo(@quot;C:NewTextFile.txtquot;); if (NewFile.Exists) Existiert die Datei? { NewFile.CopyTo(@quot;C:NewTextFileCopy.txtquot;, true); } Überschreiben wenn Datei bereits vorhanden Datei kopieren
  • 11. Bietet  Zugriff auf Informationen von Ordnern  Auflistung von Ordnerinhalten  Elementaren Zugriff auf Ordner
  • 12. DirectoryInfo deklarieren Ordnerpfad DirectoryInfo ourDir = new DirectoryInfo(@quot;C:windowsquot;); Console.WriteLine(quot;Directory: quot; + ourDir.FullName); foreach (FileInfo file in ourDir.GetFiles()) Attribute { abfragen Console.WriteLine(quot;File: quot; + file.Name); } Ordnerinhalt enumerieren
  • 13. Bietet  Zugriff auf Informationen von Laufwerken ▪ Speicherplatz ▪ Format ▪ Laufwerkstyp ▪ Name ▪ Status  Erbt nicht von FileSystemInfo
  • 14. Laufwerke abrufen DriveInfo[] drives = DriveInfo.GetDrives(); foreach (DriveInfo drive in drives) { Console.WriteLine(quot;Drive: quot; + drive.Name); Console.WriteLine(quot;Type: quot; + drive.DriveType); if (drive.IsReady) { Console.WriteLine(quot;Free Space: quot; + drive.AvailableFreeSpace + quot; bytesquot;); } } Attribute abfragen
  • 15. Bietet Zugriff auf Pfadmanipulationen  Größtenteils oft benutzte Stringmanipulationen für Dateipfade  Path.Combine für Plattformunabhängigkeit wichtig!
  • 16. 2 Pfade kombinieren Console.WriteLine(Path.Combine(quot;C:Windowsquot;, quot;System32rundll.exequot;)); Console.WriteLine(Path.GetExtension(Path.Combine(quot;C:Windowsquot;, quot;System32rundll.exequot;))); Dateierweiterung abfragen
  • 17. Auf Veränderungen im Dateisystem reagieren  FileSystemWatcher  Enable/disable  Filter Events  Auf Events registrieren  Changed  Created  Deleted  Renamed
  • 18. FileSystemWatcher static void FileSystemWatcherTest() deklarieren { FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = @quot;c:quot;; Zu überwachendes Verzeichnis watcher.Created += new FileSystemEventHandler(watcher_Changed); watcher.Renamed += new RenamedEventHandler(watcher_Changed); watcher.Deleted += new FileSystemEventHandler(watcher_Changed); watcher.Changed += new FileSystemEventHandler(watcher_Changed); watcher.EnableRaisingEvents = true; Auf Events } Eventauslösung aktivieren registrieren static void watcher_Changed(object sender, FileSystemEventArgs e) { Console.WriteLine(quot;Directory changed(quot; + e.ChangeType + quot;): quot; + e.FullPath); } Auf Änderungen reagieren
  • 19. Zugriff auf Datenströme  Stream Objekt  Stream Klassen ▪ MemoryStream ▪ CryptoStream ▪ NetworkStream ▪ GZipStream  Zugriff über StreamWriter / StreamReader
  • 20. Zugriff auf Streams wie auf ein Videoband  Abstraktion für sequentielle Datenvorgänge
  • 21.
  • 22. FileStream Objekt erstellen  Zu öffnende Datei bestimmen  mit Konstruktor  mit File.Open  FileMode festlegen  Öffnen  Schreiben ▪ Erstellen ▪ Anhängen
  • 23. statische Methoden für  Erzeugung von Datenstreams ▪ FileAccess ▪ FileMode  Einfache Dateimanipulation ▪ Kopieren ▪ Löschen ▪ Existenz prüfen ▪ Größe ▪ Etc.
  • 24. Statische Methoden für  Erzeugung von Verzeichnissen  Verändern von Verzeichnissen  Löschen von Verzeichnissen  Abfragen von Verzeichnisattributen
  • 25. Schreiben / Lesen von Text in einen beliebigen Stream  Zeichen  Zeile  Absatz  Bis zum Ende  Übergabe eines Stream Objekts  Benutzung wie Console  Gesamten Inhalt auslesen mit ReadToEnd()
  • 26. Datei erstellen mit File StreamWriter deklarieren Klasse StreamWriter Tex; Tex = File.CreateText(quot;C:NewTextFile.txtquot;); Wert schreiben Tex.WriteLine(quot;Hello World with StreamWriterquot;); Console.WriteLine(quot;File with name: quot; + ((FileStream)Tex.BaseStream).Name + quot; was written succesfullyquot;); Tex.Close(); BasisStream abfragen StreamWriter schließen
  • 27. StreamReader deklarieren StreamReader re; re = File.OpenText(quot;C:NewTextFile.txtquot;); Console.WriteLine(re.ReadToEnd()); re.Close(); Datei öffnen mit File Klasse StreamReader schließen Inhalte der Datei ausgeben
  • 28. Schreiben / Lesen von binären Daten in einen beliebigen Stream  Gleiches Handling wie StreamWriter / Reader
  • 29. FileStream erstellen FileStream BinaryStream = File.Create(@quot;C:NewBinary.binquot;); BinaryWriter bTex = new BinaryWriter(BinaryStream); bTex.Write(quot;this is binaryquot;); BinaryWriter mit bTex.Write(true); Stream bTex.Write('4'); initialisieren bTex.Close(); Daten in Stream schließen Stream schreiben
  • 30. FileStream erstellen FileStream newFile = File.Open(@quot;C:NewBinary.binquot;, FileMode.Open); BinaryReader reader = new BinaryReader(newFile); string s = reader.ReadString(); BinaryReader mit bool b = reader.ReadBoolean(); Stream char c = reader.ReadChar(); initialisieren reader.Close(); Daten aus Stream schließen Stream lesen
  • 31. Warum  Schreiben auf Festplatte oft inperfomant  Kein Erstellen von temporären Dateien erwünscht  Benutzbar mit StreamWriter / Reader  Handling wie FileStream
  • 32. MemoryStream memStrm = new MemoryStream(); MemoryStream deklarieren StreamWriter writer = new StreamWriter(memStrm); writer.WriteLine(quot;Helloquot;); writer.WriteLine(quot;Goodbyequot;); Daten Schreiben Stream an Writer übergeben schreiben writer.Flush(); erzwingen FileStream theFile = File.Create(@quot;c:inmemory.txtquot;); memStrm.WriteTo(theFile); Stream in writer.Close(); Datei theFile.Close(); schreiben memStrm.Close();
  • 33. Warum  FileStream schreibt direkt auf Festplatte ▪ Inperfomant  Hybride Mischung aus MemoryStream & FileStream  Kompatibel mit StreamWriter / Reader  Handling wie FileStream
  • 34. FileStream erstellen FileStream newFile = File.Create(@quot;c:test.txtquot;); BufferedStream buffered = new BufferedStream(newFile); StreamWriter writer = new StreamWriter(buffered); writer.WriteLine(quot;Some dataquot;); FileStream writer.Close(); übergeben BufferedStream deklarieren StreamWriter mit BufferedStream erstellen
  • 35. Speichern von Rohdaten benötigt viel Platz  Kompression – ein wichtiges Feld der Informatik  Durch Kompression wird mehr Bandbreite ermöglicht als durch Hardwareoptimierung  Digitales Zeitalter setzt auf Kompression  Eingebaute Kompression in C#  DeflateStream  GZipStream  NameSpace: System.IO.Compression
  • 36. Gleicher Kompressionsalgorithmus  Ähnlicher Umgang  GZipStream  Header mit zusätzlichen Informationen ▪ Bessere Kompatibilität  Für Verteilung von Komprimierten Daten  Arbeit auf mehreren Platformen  DeflateStream  verzichtet auf zusätzliche Informationen ▪ Geringerer Speicherverbrauch  Single System Kompression
  • 37. Handling wie FileStream  Wrapping um bestehenden FileStream  CompressionMode Enum als Konstrukturargument
  • 38. FileStreams FileStream sourceFile = File.OpenRead(@quot;c:test.txtquot;); erstellen FileStream destFile = File.Create(@quot;c:test.zipquot;); GZipStream GZipStream = new GZipStream(destFile, CompressionMode.Compress); int theByte = sourceFile.ReadByte(); while (theByte != -1) GZipStream um { FileStream GZipStream.WriteByte((byte)theByte); wrappen theByte = sourceFile.ReadByte(); } GZipStream.Close(); sourceFile.Close(); Daten destFile.Close(); schreiben
  • 39. FileStream sourceFile = File.OpenRead(@quot;c:test.zipquot;); FileStream destFile = File.Create(@quot;c:test.txtquot;); GZipStream compStream = new GZipStream(sourceFile, CompressionMode.Decompress); int theByte = compStream.ReadByte(); while (theByte != -1) { destFile.WriteByte((byte)theByte); theByte = compStream.ReadByte(); } compStream.Close(); destFile.Close(); sourceFile.Close();
  • 40. SharpZipLib  Tar  GZIP  ZIP  BZIP2
  • 41. OpenFileDialog  SaveFileDialog
  • 42. OpenFileDialog deklarieren OpenFileDialog NewFileDialog = new OpenFileDialog(); NewFileDialog.Filter = quot;Textdateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*quot;; if (NewFileDialog.ShowDialog() == DialogResult.OK) Filter festlegen { string s = NewFileDialog.FileName; MessageBox.Show(s); } Dateinamen Result abfragen abfragen
  • 43. SaveFileDialog deklarieren SaveFileDialog NewFileDialog = new SaveFileDialog(); NewFileDialog.Filter = quot;Textdateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*quot;; if (NewFileDialog.ShowDialog() == DialogResult.OK) Filter festlegen { string s = NewFileDialog.FileName; MessageBox.Show(s); } Result abfragen Dateinamen abfragen
  • 44. Warum  Direkter Zugriff auf das Dateisystem birgt Risiken  SandBox Konzept bietet optimalen Tradeoff zwischen Sicherheit und Funktion  IsolatedStorageFile Klasse  Erstellung eines Stores  NameSpace: System.IO.IsolatedStorage
  • 45. Scope definiert den Kontext des Stores  Assembly / Machine ▪ Spezifiziert für die Maschine / Assembly ▪ Anwendungsdaten ▪ GetMachineStoreForAssembly()  Assembly / User ▪ Spezifiziert für die Assembly / User ▪ Userbezogene Daten ▪ GetUserStoreForAssembly()
  • 46. Wie FileStream aber  Speziell um Dateien aus Isolated Storage zu lesen  Kompatibel mit StreamReader / Writer
  • 47. Isolated Storage anfordern IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForAssembly(); Isolated FileStream erstellen IsolatedStorageFileStream userStream = new IsolatedStorageFileStream(quot;UserSettings.setquot;, FileMode.Create, userStore); StreamWriter userWriter = new StreamWriter(userStream); userWriter.WriteLine(quot;User Prefsquot;); userWriter.Close(); Daten in Stream schreiben
  • 48. Isolated Storage ist wie ein virtuelles Laufwerk  Ordnerstruktur  Dateistruktur  Abrufen von Ordnerliste mit GetDirectoryNames()  Abrufen von Dateiliste mit GetFileNames()
  • 49. Isolated Storage anfordern IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForAssembly(); foreach (string isofilename in userStore.GetFileNames(quot;*quot;)) { MessageBox.Show(isofilename); } Dateien abrufen
  • 50. Wir haben gelernt  Umgang mit Dateien ▪ Datei / Ordner / Laufwerksinformationen abfragen ▪ Änderungen in der Ordnerstruktur überwachen ▪ Streams aus Dateien erstellen  Umgang mit Streams ▪ Dateien bearbeiten mit FileStream ▪ Speicher schreiben / lesen mit MemoryStream ▪ Effizient Dateien schreiben mit BufferedStream ▪ Schreiben und Lesen mit StreamWriter / Reader ▪ Komprimierung mit GZipStream / DeflateStream  FileDialoge ▪ Abfragen von Speicherorten  Isolated Storage ▪ Sandboxfunktionen des .net Frameworks nutzen