+ All Categories
Home > Technology > C# Workshop - File Operations

C# Workshop - File Operations

Date post: 10-May-2015
Category:
Upload: qiong-wu
View: 3,102 times
Download: 0 times
Share this document with a friend
Description:
That's the slides for our C# Workshop at Darmstadt
Popular Tags:
51
FileOperations mit C# Dateien lesen, schreiben und verarbeiten C# Workshop, TU Darmstadt 2008, Präsentation von Qiong Wu (Microsoft Junior Student Partner)
Transcript
Page 1: C# Workshop - File Operations

FileOperations mit C#Dateien lesen, schreiben und verarbeiten

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

Page 2: C# Workshop - File Operations

Todo:

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

Daten Isolated Storage

Page 3: C# Workshop - File Operations

Input / Output – Was ist das?

Output

Input

Page 4: C# Workshop - File Operations

OutputApplication

Daten müssen immer gespeichert werden!!!

Page 5: C# Workshop - File Operations

InputApplication

Daten müssen auch immer geladen

werden!!!

Page 6: C# Workshop - File Operations

File Systemklassen

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

▪ DriveInfo Manipulierende Klassen▪ File▪ Directory▪ Path

Page 7: C# Workshop - File Operations

FileSystemInfo Klasse

Bietet Zugriff auf Informationen von Dateien und Ordnern

Basisklasse für FileInfo und DirectoryInfo

Page 8: C# Workshop - File Operations

FileInfo Klasse

Bietet Zugriff auf Informationen von Dateien

Page 9: C# Workshop - File Operations

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

Page 10: C# Workshop - File Operations

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

Page 11: C# Workshop - File Operations

DirectoryInfo Klasse

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

Page 12: C# Workshop - File Operations

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

Page 13: C# Workshop - File Operations

DriveInfo Klasse

Bietet Zugriff auf Informationen von

Laufwerken▪ Speicherplatz▪ Format▪ Laufwerkstyp▪ Name▪ Status

Erbt nicht von FileSystemInfo

Page 14: C# Workshop - File Operations

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

Page 15: C# Workshop - File Operations

Path Klasse

Bietet Zugriff auf Pfadmanipulationen

Größtenteils oft benutzte Stringmanipulationen für Dateipfade

Path.Combine für Plattformunabhängigkeit wichtig!

Page 16: C# Workshop - File Operations

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

Page 17: C# Workshop - File Operations

File Events

Auf Veränderungen im Dateisystem reagieren

FileSystemWatcher Enable/disable Filter Events

Auf Events registrieren Changed Created Deleted Renamed

Page 18: C# Workshop - File Operations

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

Page 19: C# Workshop - File Operations

Streams

Zugriff auf Datenströme Stream Objekt

Stream Klassen▪ MemoryStream▪ CryptoStream▪ NetworkStream▪ GZipStream

Zugriff über StreamWriter / StreamReader

Page 20: C# Workshop - File Operations

Zugriff auf Streams

Zugriff auf Streams wie auf ein Videoband

Abstraktion für sequentielle Datenvorgänge

Page 21: C# Workshop - File Operations

Streams nach Benutzung

immer schließen!

Page 22: C# Workshop - File Operations

FileStream

FileStream Objekt erstellen Zu öffnende Datei bestimmen

mit Konstruktor mit File.Open

FileMode festlegen Öffnen Schreiben▪ Erstellen▪ Anhängen

Page 23: C# Workshop - File Operations

File Klasse

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

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

Page 24: C# Workshop - File Operations

Directory Klasse

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

Page 25: C# Workshop - File Operations

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

Page 26: C# Workshop - File Operations

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

Page 27: C# Workshop - File Operations

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

Page 28: C# Workshop - File Operations

BinaryWriter / BinaryReader

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

Gleiches Handling wie StreamWriter / Reader

Page 29: C# Workshop - File Operations

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

Page 30: C# Workshop - File Operations

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

Page 31: C# Workshop - File Operations

MemoryStream

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

erwünscht Benutzbar mit StreamWriter / Reader Handling wie FileStream

Page 32: C# Workshop - File Operations

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

Page 33: C# Workshop - File Operations

BufferedStream

Warum FileStream schreibt direkt auf Festplatte▪ Inperfomant

Hybride Mischung aus MemoryStream & FileStream

Kompatibel mit StreamWriter / Reader

Handling wie FileStream

Page 34: C# Workshop - File Operations

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

Page 35: C# Workshop - File Operations

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

Page 36: C# Workshop - File Operations

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

Page 37: C# Workshop - File Operations

GZipStream & DeflateStream

Handling wie FileStream Wrapping um bestehenden

FileStream CompressionMode Enum als

Konstrukturargument

Page 38: C# Workshop - File Operations

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

Page 39: C# Workshop - File Operations

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

Page 40: C# Workshop - File Operations

Alternativen zur Datenkompression

SharpZipLib Tar GZIP ZIP BZIP2

Page 41: C# Workshop - File Operations

Dialoge

OpenFileDialog SaveFileDialog

Page 42: C# Workshop - File Operations

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

Page 43: C# Workshop - File Operations

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

Page 44: C# Workshop - File Operations

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

Page 45: C# Workshop - File Operations

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

Page 46: C# Workshop - File Operations

IsolatedStorageFileStream Klasse

Wie FileStream aber Speziell um Dateien aus Isolated Storage

zu lesen Kompatibel mit StreamReader /

Writer

Page 47: C# Workshop - File Operations

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

Page 48: C# Workshop - File Operations

Ordner in Isolated Storage

Isolated Storage ist wie ein virtuelles Laufwerk Ordnerstruktur Dateistruktur

Abrufen von Ordnerliste mit GetDirectoryNames()

Abrufen von Dateiliste mit GetFileNames()

Page 49: C# Workshop - File Operations

Beispiel: Ordner in Isolated Storage

IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForAssembly();

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

Dateien abrufen

Isolated Storage anfordern

Page 50: C# Workshop - File Operations

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

Page 51: C# Workshop - File Operations

Fragen?


Recommended