c# workshop - file operations

Post on 10-May-2015

3.102 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

That's the slides for our C# Workshop at Darmstadt

TRANSCRIPT

FileOperations mit C#Dateien lesen, schreiben und verarbeiten

C# Workshop, TU Darmstadt 2008, Präsentation von Qiong Wu (Microsoft Junior Student Partner)

Todo:

Input / Output Zugriff auf Dateien und Ordner Arbeiten mit Byte Streams Reader und Writer Klassen verwenden Komprimieren und Dekomprimieren von

Daten Isolated Storage

Input / Output – Was ist das?

Output

Input

OutputApplication

Daten müssen immer gespeichert werden!!!

InputApplication

Daten müssen auch immer geladen

werden!!!

File Systemklassen

System.IO Namespace Informelle Klassen▪ FileSystemInfo▪ FileInfo▪ DirectoryInfo

▪ DriveInfo Manipulierende Klassen▪ File▪ Directory▪ Path

FileSystemInfo Klasse

Bietet Zugriff auf Informationen von Dateien und Ordnern

Basisklasse für FileInfo und DirectoryInfo

FileInfo Klasse

Bietet Zugriff auf Informationen von Dateien

Beispiel: Informationen abrufen mit FileInfo

FileInfo NewFile = new FileInfo(@"C:\NewTextFile.txt"); if (NewFile.Exists){ Console.WriteLine("Name: " + NewFile.Name); Console.WriteLine("Fullname: " + NewFile.FullName); Console.WriteLine("Size: " + NewFile.Length + " bytes");}

FileInfo deklarieren Dateipfad

Existiert die Datei?

Attribute abfragen

Beispiel: Elementare Operationen mit FileInfo

FileInfo NewFile = new FileInfo(@"C:\NewTextFile.txt"); if (NewFile.Exists){ NewFile.CopyTo(@"C:\NewTextFileCopy.txt", true);

}

FileInfo deklarieren Dateipfad

Existiert die Datei?

Datei kopieren

Überschreiben wenn Datei

bereits vorhanden

DirectoryInfo Klasse

Bietet Zugriff auf Informationen von Ordnern Auflistung von Ordnerinhalten Elementaren Zugriff auf Ordner

Beispiel: Informationen abrufen mit DirectoryInfo

DirectoryInfo ourDir = new DirectoryInfo(@"C:\windows"); Console.WriteLine("Directory: " + ourDir.FullName); foreach (FileInfo file in ourDir.GetFiles()){ Console.WriteLine("File: " + file.Name);}

DirectoryInfo deklarieren

Ordnerpfad

Attribute abfragen

Ordnerinhalt enumerieren

DriveInfo Klasse

Bietet Zugriff auf Informationen von

Laufwerken▪ Speicherplatz▪ Format▪ Laufwerkstyp▪ Name▪ Status

Erbt nicht von FileSystemInfo

DriveInfo Klasse

DriveInfo[] drives = DriveInfo.GetDrives(); foreach (DriveInfo drive in drives){ Console.WriteLine("Drive: " + drive.Name); Console.WriteLine("Type: " + drive.DriveType); if (drive.IsReady) { Console.WriteLine("Free Space: " + drive.AvailableFreeSpace +

" bytes"); }}

Laufwerke abrufen

Attribute abfragen

Path Klasse

Bietet Zugriff auf Pfadmanipulationen

Größtenteils oft benutzte Stringmanipulationen für Dateipfade

Path.Combine für Plattformunabhängigkeit wichtig!

Beispiel: Path Klasse

Console.WriteLine(Path.Combine("C:\\Windows", "System32\\rundll.exe"));

Console.WriteLine(Path.GetExtension(Path.Combine("C:\\Windows", "System32\\rundll.exe")));

2 Pfade kombinieren

Dateierweiterung abfragen

File Events

Auf Veränderungen im Dateisystem reagieren

FileSystemWatcher Enable/disable Filter Events

Auf Events registrieren Changed Created Deleted Renamed

Beispiel: File Events

static void FileSystemWatcherTest() { FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = @"c:\";  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; }  static void watcher_Changed(object sender, FileSystemEventArgs e) { Console.WriteLine("Directory changed(" + e.ChangeType + "): " + e.FullPath); }

FileSystemWatcher deklarieren

Zu überwachendes Verzeichnis

Auf Events registrieren

Eventauslösung aktivieren

Auf Änderungen reagieren

Streams

Zugriff auf Datenströme Stream Objekt

Stream Klassen▪ MemoryStream▪ CryptoStream▪ NetworkStream▪ GZipStream

Zugriff über StreamWriter / StreamReader

Zugriff auf Streams

Zugriff auf Streams wie auf ein Videoband

Abstraktion für sequentielle Datenvorgänge

Streams nach Benutzung

immer schließen!

FileStream

FileStream Objekt erstellen Zu öffnende Datei bestimmen

mit Konstruktor mit File.Open

FileMode festlegen Öffnen Schreiben▪ Erstellen▪ Anhängen

File Klasse

statische Methoden für Erzeugung von Datenstreams▪ FileAccess▪ FileMode

Einfache Dateimanipulation▪ Kopieren▪ Löschen▪ Existenz prüfen▪ Größe▪ Etc.

Directory Klasse

Statische Methoden für Erzeugung von Verzeichnissen Verändern von Verzeichnissen Löschen von Verzeichnissen Abfragen von Verzeichnisattributen

StreamWriter / StreamReader

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()

Beispiel: StreamWriter

StreamWriter Tex;Tex = File.CreateText("C:\\NewTextFile.txt");Tex.WriteLine("Hello World with StreamWriter");Console.WriteLine("File with name: " +

((FileStream)Tex.BaseStream).Name + " was written succesfully");Tex.Close();

StreamWriter deklarieren

Datei erstellen mit File Klasse

BasisStream abfragen

StreamWriter schließen

Wert schreiben

Beispiel StreamReader

StreamReader re;re = File.OpenText("C:\\NewTextFile.txt");Console.WriteLine(re.ReadToEnd());re.Close();

StreamReader deklarieren

Datei öffnen mit File Klasse

Inhalte der Datei ausgeben

StreamReader schließen

BinaryWriter / BinaryReader

Schreiben / Lesen von binären Daten in einen beliebigen Stream

Gleiches Handling wie StreamWriter / Reader

Beispiel: BinaryWriter

FileStream BinaryStream = File.Create(@"C:\NewBinary.bin");

BinaryWriter bTex = new BinaryWriter(BinaryStream);

bTex.Write("this is binary");bTex.Write(true);bTex.Write('4');

bTex.Close();

Daten in Stream

schreiben

FileStream erstellen

BinaryWriter mit Stream initialisieren

Stream schließen

Beispiel: BinaryReader

FileStream newFile = File.Open(@"C:\NewBinary.bin", FileMode.Open);

 BinaryReader reader = new BinaryReader(newFile);

string s = reader.ReadString();bool b = reader.ReadBoolean();char c = reader.ReadChar(); reader.Close();

Daten aus Stream lesen

FileStream erstellen

BinaryReader mit Stream initialisieren

Stream schließen

MemoryStream

Warum Schreiben auf Festplatte oft inperfomant Kein Erstellen von temporären Dateien

erwünscht Benutzbar mit StreamWriter / Reader Handling wie FileStream

Beispiel: MemoryStream

MemoryStream memStrm = new MemoryStream();

StreamWriter writer = new StreamWriter(memStrm);writer.WriteLine("Hello");writer.WriteLine("Goodbye"); writer.Flush(); FileStream theFile = File.Create(@"c:\inmemory.txt"); memStrm.WriteTo(theFile); writer.Close();theFile.Close();memStrm.Close();

MemoryStream deklarieren

Stream an Writer übergeben

Daten schreibe

n

Schreiben

erzwingen

Stream in Datei

schreiben

BufferedStream

Warum FileStream schreibt direkt auf Festplatte▪ Inperfomant

Hybride Mischung aus MemoryStream & FileStream

Kompatibel mit StreamWriter / Reader

Handling wie FileStream

Beispiel: BufferedStream

FileStream newFile = File.Create(@"c:\test.txt");

BufferedStream buffered = new BufferedStream(newFile);StreamWriter writer = new StreamWriter(buffered);writer.WriteLine("Some data");writer.Close();

FileStream erstellen

FileStream übergeben

BufferedStream

deklarierenStreamWriter

mit BufferedStream erstellen

Komprimierung

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

GZipStream vs DeflateStream 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

GZipStream & DeflateStream

Handling wie FileStream Wrapping um bestehenden

FileStream CompressionMode Enum als

Konstrukturargument

Beispiel: Compression StreamFileStream sourceFile = File.OpenRead(@"c:\test.txt");FileStream destFile = File.Create(@"c:\test.zip"); GZipStream GZipStream = new GZipStream(destFile, CompressionMode.Compress); int theByte = sourceFile.ReadByte();while (theByte != -1){ GZipStream.WriteByte((byte)theByte); theByte = sourceFile.ReadByte();}

GZipStream.Close();sourceFile.Close();destFile.Close();

FileStreams erstellen

GZipStream um

FileStream wrappen

Daten schreiben

Beispiel: Decompression StreamFileStream sourceFile = File.OpenRead(@"c:\test.zip");FileStream destFile = File.Create(@"c:\test.txt");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();

Alternativen zur Datenkompression

SharpZipLib Tar GZIP ZIP BZIP2

Dialoge

OpenFileDialog SaveFileDialog

Beispiel: OpenFileDialog

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

(*.*)|*.*";

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

OpenFileDialog

deklarieren

Filter festlegen

Result abfragenDateinamen

abfragen

Beispiel: SaveFileDialog

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

(*.*)|*.*";

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

SaveFileDialog deklarieren

Filter festlegen

Result abfragenDateinamen

abfragen

Isolated Storage

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

Isolated Storage - Scopes

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()

IsolatedStorageFileStream Klasse

Wie FileStream aber Speziell um Dateien aus Isolated Storage

zu lesen Kompatibel mit StreamReader /

Writer

Beispiel: IsolatedStorageFileStream Klasse

IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForAssembly();

IsolatedStorageFileStream userStream = new IsolatedStorageFileStream("UserSettings.set", FileMode.Create, userStore);

 StreamWriter userWriter = new StreamWriter(userStream);userWriter.WriteLine("User Prefs");userWriter.Close();

Isolated Storage anfordern

Isolated FileStream erstellen

Daten in Stream schreiben

Ordner in Isolated Storage

Isolated Storage ist wie ein virtuelles Laufwerk Ordnerstruktur Dateistruktur

Abrufen von Ordnerliste mit GetDirectoryNames()

Abrufen von Dateiliste mit GetFileNames()

Beispiel: Ordner in Isolated Storage

IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForAssembly();

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

Dateien abrufen

Isolated Storage anfordern

Zusammenfassung

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

Fragen?

top related