Wyk ład II: Wejścia i wyjścia (System.IO) Karim Agha Karol Rogowski Adam Rafałko
Co dziś omówimy ? <ul><li>Operacje na plikach używając klas zawartych w System.IO. </li></ul><ul><li>Strumienie. </li></ul...
Co powinniśmy już umieć ? <ul><li>Utworzyć nowy projekt konsolowy w Microsoft Visual Studio dla C# lub VB. </li></ul><ul><...
Nawigacja po systemie plików <ul><li>System.IO zawiera takie klasy które pozwalają na nawigację i manipulację plików: </li...
Klasy Informacyjne <ul><li>Dziedziczą po  FileSystemInfo. </li></ul><ul><li>Klasy te nazywają się: </li></ul><ul><ul><li>F...
Klasy Informacyjne cd. Najważniejsze właściwości klasy  FileSystemInfo . Właściwość Opis Attributes Zwraca objekt  FileAtt...
Klasy Informacyjne <ul><li>Jak juz mówilismy, po  FileSystemInfo,  dziedziczą: </li></ul><ul><li>FileInfo: </li></ul>FileI...
FileInfo Właściwość Opis Directory Zwraca  DirectoryInfo  dla ktalogu w którym znajduję sie plik. DirectoryName Nazwa kata...
FileInfo Metoda Opis AppendText Tworzy  StreamWriter   który pozwala na dpisanie tektu do pliku. CopyTo Tworzy kopie pliku...
Jak odczytać informacje o pliku? <ul><li>Aby uzyskać informacje o konkretnym pliku należy: </li></ul><ul><li>Utworzyć nowy...
Przykład: <ul><li>FileInfo ourFile = new   FileInfo( @ &quot;c:oot.ini &quot;);  </li></ul><ul><li>if (ourFile.Exists) { ...
DirectoryInfo <ul><li>Jest to klasa która pozwala na manipulacje katalogiem. </li></ul><ul><li>Najważniejsze właściwości: ...
DirectoryInfo <ul><li>Najważniejsze metody: </li></ul>Metoda Opis Create Tworzy nowy katalog CreateSubdirectory Tworzy now...
Jak przeszukac pliki w katalogu? <ul><li>Tworzymy objekt  DirectoryInfo  wskazujacy na katalog który chcemy przeszukać. </...
DriveFormat <ul><li>DriveFormat  pozwala na pozyskiwanie onformacji o dyskach. </li></ul>Właściwość Opis AvailableFreeSpac...
DriveInfo <ul><li>Metody DriveFormat: </li></ul><ul><ul><li>GetDrives : metoda statyczna, zwraca wszystkie dyski w kompute...
Jak odczytać dyski? <ul><li>Wywołać statyczna metoda  GetDrives. </li></ul><ul><li>Iterować przez zwróconą tablice  DriveI...
Klasa  Path <ul><li>Pozwala na manipulacje Ścieżkami </li></ul><ul><li>Statyczne metody: </li></ul><ul><ul><li>ChangeExten...
Jak zmienić rozszerzenie pliku? <ul><li>string ourPath = @&quot;c:oot.ini&quot;; </li></ul><ul><li>Console.WriteLine(ourP...
FileSystemWatcher <ul><li>Pozwala monitorować system plików. </li></ul><ul><li>Właściwości: </li></ul><ul><ul><li>EnableRi...
Jak monitorować katalog? <ul><li>Otworzyć nowy  FileSystemWatcher . </li></ul><ul><li>Ustalić  Path. </li></ul><ul><li>Zap...
Przykład  FileSystemWatcher <ul><li>FileSystemWatcher watcher = new FileSystemWatcher();  </li></ul><ul><li>watcher.Path =...
Lab: Przeszukiwanie plików i ich monitorowanie. <ul><li>Na tym Lab, przeszukamy pliki i katalogi w danym katalogu i bedzie...
Strumienie <ul><li>Jest to sposob na prace z danymi w .NET Framework.  </li></ul><ul><li>Wszystkie strumienie dziedzicza z...
Strumienie <ul><li>Klasa  Stream  posiada metody takie jak:  Close, Flush, Read, ReadByte,   Seek, SetLength, Write, Write...
Jakie klasy pozwalaja na odczyt i zapis danych ? <ul><li>Wiekszość operacji na plikach zaczyna sie od klasy  File . </li><...
Strumienie –  File <ul><li>Klasa do strumieniowego zapisu danych na plikach nazywa sie  FileStream. </li></ul><ul><li>Klas...
Strumienie -  Directory <ul><li>Klasa  Directory  jest klasą statyczną. </li></ul><ul><li>Posiada metody służące do manipu...
Strumienie <ul><li>FileAccess , enumeracja która ustala poziom uprawnień potrzebnych do otwarcia pliku. ( Read, Write, Rea...
FileStream <ul><li>Klasa  FileStream  otwiera pliki do zapisu lub odczytu. </li></ul><ul><li>Najważniejsze właściwości to ...
StreamReader <ul><li>Klasa  StreamReader   pozwala na udczyt danych ze Strumienia. </li></ul><ul><li>Najważniejsze właściw...
Jak czytać z pliku ? <ul><li>FileStream theFile =  File.Open (@&quot;C:oot.ini&quot;,  FileMode.Open, FileAccess.Read ); ...
StreamWriter <ul><li>Pozwala na zapisywanie danych w strumieniu. </li></ul><ul><li>Najważniejsze właściwości to:  AutoFlus...
StreamWriter <ul><li>StreamWriter writer = new StreamWriter(theFile); </li></ul><ul><li>writer.WriteLine(&quot;Hello&quot;...
Alternatywy <ul><li>StreamWriter writer = new StreamWriter(theFile); </li></ul><ul><li>StreamWriter writer =File.CreateTex...
Reader i Writer <ul><li>Klasy *Reader i *Writer maja za zadnie </li></ul><ul><li>ułatwić czytanie danych strumieniowych. <...
Dane Binarne <ul><li>Nie wszystkie dane są tekstowe. </li></ul><ul><li>Do odczytu danych binarnych używamy  BinaryReader ....
Dane Binarne <ul><li>Przykład (zapis): </li></ul><ul><li>FileStream newFile = File.Create(@&quot;c:somefile.bin&quot;); </...
Dane Binarne <ul><li>Przykład (otczyt): </li></ul><ul><li>FileStream newFile = File.Open(@&quot;c:somefile.bin&quot;, File...
Inne typy strumieni <ul><li>MemoryStream  –   zapis i odczyt bezposrednio do pamięci RAM.  </li></ul><ul><li>BufferedStrea...
Kompresja danych <ul><li>W .NET Framework, kompresja danych opiera się o Strumienie Kompresujące. </li></ul><ul><li>Strumi...
GZipStream <ul><li>Klasa  GZipStream  pozwala na kompresję danych znajdujących się w innym strumieniu używając metody GZIP...
DeflateStream <ul><li>Pozwala na kompresję danych używając metody  Deflate . </li></ul><ul><li>Również bazuję na  Stream. ...
Jak kompresować dane? <ul><li>Kompresja w .NET bazuję na strumieniach, są to jednak innego typu strumienie niż omawiane do...
Isolated Storage <ul><li>Co to jest Isolated Storage? </li></ul><ul><li>Klasa  IsolatedStorageFile   </li></ul><ul><li>Rod...
Jak tworzy ć Isolated Storage? <ul><li>Zdecydować jaki typ IS potrzebujemy. </li></ul><ul><li>IsolatedStorageFile machineS...
Czytanie i zapis do IS <ul><li>IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForAssembly(); </li></ul><u...
Upcoming SlideShare
Loading in …5
×

PB.NET II (System.IO)

1,536 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,536
On SlideShare
0
From Embeds
0
Number of Embeds
201
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • PB.NET II (System.IO)

    1. 1. Wyk ład II: Wejścia i wyjścia (System.IO) Karim Agha Karol Rogowski Adam Rafałko
    2. 2. Co dziś omówimy ? <ul><li>Operacje na plikach używając klas zawartych w System.IO. </li></ul><ul><li>Strumienie. </li></ul><ul><li>Jak używać klas Reader i Writer . </li></ul><ul><li>Kompresja danych. </li></ul><ul><li>Isolated Storage. </li></ul><ul><li>Projekt Grupy PB.NET </li></ul>
    3. 3. Co powinniśmy już umieć ? <ul><li>Utworzyć nowy projekt konsolowy w Microsoft Visual Studio dla C# lub VB. </li></ul><ul><li>Dodać refer en cję do projektu. </li></ul><ul><li>Utworzyć plik tekstowy. </li></ul>
    4. 4. Nawigacja po systemie plików <ul><li>System.IO zawiera takie klasy które pozwalają na nawigację i manipulację plików: </li></ul><ul><ul><li>Klasy Informacyjne ( FileInfo , DirectoryInfo ) </li></ul></ul><ul><ul><li>Klasy narzędziowe (File, Directory, Path) </li></ul></ul>
    5. 5. Klasy Informacyjne <ul><li>Dziedziczą po FileSystemInfo. </li></ul><ul><li>Klasy te nazywają się: </li></ul><ul><ul><li>FileInfo </li></ul></ul><ul><ul><li>DirectoryInfo </li></ul></ul><ul><ul><li>DriveInfo* </li></ul></ul><ul><li>Służą głównie do pozyskiwania informacji o plikach, katalogach lub dyskach. </li></ul>
    6. 6. Klasy Informacyjne cd. Najważniejsze właściwości klasy FileSystemInfo . Właściwość Opis Attributes Zwraca objekt FileAttributes dla danego pliku lub katalogu. CreationTime Date utworzenia pliku/katalogu. Exists Informuje o tym czy plik/katalog istnieje. Extension Rozszerzenie. FullName Pe łna ścieżka do pliku/katalogu. LastAccessTime Data ostatniego odczytu. LastWriteTime Data ostatniego zapisu Name Prosta nazwa: plik: C:Program FilesPB.NETplik.txt: -> plik.txt katalog: C:Program FilesPB.NET -> PB.NET
    7. 7. Klasy Informacyjne <ul><li>Jak juz mówilismy, po FileSystemInfo, dziedziczą: </li></ul><ul><li>FileInfo: </li></ul>FileInfo jest klasa która pozwala na manipulacje plikiem. Metoda Opis Delete Kasowanie pliku/katalogu. Refresh Odświerza dane w klasie o pliku/katalogu.
    8. 8. FileInfo Właściwość Opis Directory Zwraca DirectoryInfo dla ktalogu w którym znajduję sie plik. DirectoryName Nazwa katalogu w którym znajduję sie plik IsReadOnly Sprawdzenie lub przypisanie atrybutu read-only. Length Rozmiar pliku
    9. 9. FileInfo Metoda Opis AppendText Tworzy StreamWriter który pozwala na dpisanie tektu do pliku. CopyTo Tworzy kopie pliku w wybranej lokalizacji Create Tworzy nowy plik CreateText Tworzy nowy StreamWriter oraz nowy plik do zapisu. Encrypt Szyfruje plik danego użytkownika Decrypt Odszyfruje plik MoveTo Przenosi plik w nowe miejsce. (Cut-Paste) Open Otwiera plik z zestawem wybranych uprawnień OpenRead Otwiera plik tylko do odczytu OpenText Otwiera plik i zwraca StreamReader pozwalający na odczyt tekstu z pliku. OpenWrite Otwiera plik tylko do zapisu Replace Podmienia plik
    10. 10. Jak odczytać informacje o pliku? <ul><li>Aby uzyskać informacje o konkretnym pliku należy: </li></ul><ul><li>Utworzyć nowy objekt FileInfo podając ścieżkę dos t ępu do pliku. </li></ul><ul><li>Reszta będzie już w utworzonym obiekcie. </li></ul>
    11. 11. Przykład: <ul><li>FileInfo ourFile = new FileInfo( @ &quot;c:oot.ini &quot;); </li></ul><ul><li>if (ourFile.Exists) { </li></ul><ul><li>Console.WriteLine(&quot;Filename : {0}&quot;,ourFile.Name); </li></ul><ul><li>Console.WriteLine(&quot;Path : {0}&quot;,ourFile.FullName); </li></ul><ul><li>} </li></ul><ul><li>Kopiowanie? </li></ul><ul><li>FileInfo ourFile = new FileInfo(@&quot;c:oot.ini&quot;); </li></ul><ul><li>ourFile.CopyTo(@&quot;c:oot.bak&quot;); </li></ul>
    12. 12. DirectoryInfo <ul><li>Jest to klasa która pozwala na manipulacje katalogiem. </li></ul><ul><li>Najważniejsze właściwości: </li></ul>Właściwość Opis Parent Zwraca objekt DirectoryInfo dla katalogu który zawiera nasz katalog (rodzica) Root Zwraca bazowego rodzica (string)
    13. 13. DirectoryInfo <ul><li>Najważniejsze metody: </li></ul>Metoda Opis Create Tworzy nowy katalog CreateSubdirectory Tworzy nowy katalog ktorego rodzicem jest aktualny katalog GetDirectories Zwraca tablice z katalogami w danym katalogu GetFiles Zwraca tablice z plikami w danym katalogu GetFileSysytemInfos Zwraca tablice z objektami FileSystemInfo dla kazdego pliku/katalogu w danym katalogu. MoveTo Przenosi plik.
    14. 14. Jak przeszukac pliki w katalogu? <ul><li>Tworzymy objekt DirectoryInfo wskazujacy na katalog który chcemy przeszukać. </li></ul><ul><li>Wywołujemy metodę GetFiles . </li></ul><ul><li>Przykład: </li></ul><ul><li>DirectoryInfo ourDir = new DirectoryInfo(@&quot;c:windows&quot;); </li></ul><ul><li>Console.WriteLine(&quot;Directory: {0}&quot;, ourDir.FullName); </li></ul><ul><li>foreach (FileInfo file in ourDir.GetFiles()) { </li></ul><ul><li>Console.WriteLine(&quot;File: {0}&quot;, file.Name); </li></ul><ul><li>} </li></ul>
    15. 15. DriveFormat <ul><li>DriveFormat pozwala na pozyskiwanie onformacji o dyskach. </li></ul>Właściwość Opis AvailableFreeSpace Ilość wolnego dostępnego miejsca na dysku. DriveFormat Zwraca format dysku (NTFS, FAT32, etc..) DriveType Typ dysku (opisane poźniej) IsReady Sprawdza czy dysk jest gotowy do odczytu/zapisu Name Nazwa dysku (literka) RootDirectory Objekt DirectoryInfo dla tego dysku TotalFreeSpace Całkowitą wolną powierzchnie na dysku TotalSize Całkowity rozmiar dysku VolumeLabel Nazwa dysku
    16. 16. DriveInfo <ul><li>Metody DriveFormat: </li></ul><ul><ul><li>GetDrives : metoda statyczna, zwraca wszystkie dyski w komputerze. </li></ul></ul><ul><li>DriveType to enumeracja opisująca typ dysku: CDRom, Fixed, Network, NoRootDirectory, Ram, Removable, Unknown </li></ul>
    17. 17. Jak odczytać dyski? <ul><li>Wywołać statyczna metoda GetDrives. </li></ul><ul><li>Iterować przez zwróconą tablice DriveInfo . </li></ul><ul><li>DriveInfo[] drives = DriveInfo.GetDrives(); </li></ul><ul><li>foreach (DriveInfo drive in drives) { Console.WriteLine(&quot;Drive: {0}&quot;, drive.Name); Console.WriteLine(&quot;Type: {0}&quot;, drive.DriveType); </li></ul><ul><li>} </li></ul>
    18. 18. Klasa Path <ul><li>Pozwala na manipulacje Ścieżkami </li></ul><ul><li>Statyczne metody: </li></ul><ul><ul><li>ChangeExtension </li></ul></ul><ul><ul><li>Combine </li></ul></ul><ul><ul><li>GetDirectoryName </li></ul></ul><ul><ul><li>GetExtension </li></ul></ul><ul><ul><li>GetFileName </li></ul></ul><ul><ul><li>GetFileNameWIthoutExtension </li></ul></ul><ul><ul><li>GetFillPath </li></ul></ul><ul><ul><li>GetPathRoot </li></ul></ul><ul><ul><li>GetRandomFileName </li></ul></ul><ul><ul><li>GetTempFileName </li></ul></ul><ul><ul><li>GetTempPath </li></ul></ul><ul><ul><li>HasExtension </li></ul></ul><ul><ul><li>IsPathRooted </li></ul></ul>
    19. 19. Jak zmienić rozszerzenie pliku? <ul><li>string ourPath = @&quot;c:oot.ini&quot;; </li></ul><ul><li>Console.WriteLine(ourPath); </li></ul><ul><li>Console.WriteLine(&quot;Ext: {0}&quot;, Path.GetExtension(ourPath)); </li></ul><ul><li>Console.WriteLine(&quot;Change Path: {0}&quot;, Path.ChangeExtension(ourPath, &quot;bak&quot;)); </li></ul>
    20. 20. FileSystemWatcher <ul><li>Pozwala monitorować system plików. </li></ul><ul><li>Właściwości: </li></ul><ul><ul><li>EnableRisingEvents </li></ul></ul><ul><ul><li>Filter </li></ul></ul><ul><ul><li>IncludeSubdirectories </li></ul></ul><ul><ul><li>NotifyFilter </li></ul></ul><ul><ul><li>Path </li></ul></ul>
    21. 21. Jak monitorować katalog? <ul><li>Otworzyć nowy FileSystemWatcher . </li></ul><ul><li>Ustalić Path. </li></ul><ul><li>Zapisać sie do eventów Creader i Deleted. </li></ul><ul><li>Włączyć eventy poprzez ustawienie EnableRisingEvents na true. </li></ul>
    22. 22. Przykład FileSystemWatcher <ul><li>FileSystemWatcher watcher = new FileSystemWatcher(); </li></ul><ul><li>watcher.Path = @&quot;c:&quot;; </li></ul><ul><li>watcher.Created += new FileSystemEventHandler(watcher_Changed); </li></ul><ul><li>watcher.Deleted += new FileSystemEventHandler(watcher_Changed); </li></ul><ul><li>watcher.EnableRaisingEvents = true; </li></ul><ul><li>static void watcher_Changed(object sender, FileSystemEventArgs e) { </li></ul><ul><li> Console.WriteLine(&quot;Directory changed({0}): {1}&quot;, e.ChangeType, e.FullPath); </li></ul><ul><li>} </li></ul>
    23. 23. Lab: Przeszukiwanie plików i ich monitorowanie. <ul><li>Na tym Lab, przeszukamy pliki i katalogi w danym katalogu i bedziemy monitorowac czy jakikolwiek z tych plikow lub katalogów zmienił sie. </li></ul>
    24. 24. Strumienie <ul><li>Jest to sposob na prace z danymi w .NET Framework. </li></ul><ul><li>Wszystkie strumienie dziedzicza z abstrakcyjnej klasy Stream. </li></ul><ul><li>Klasa stream zawiera właściwości takie jak: CanRead, CanSeek, CanTimeout, CanWrite, Length, Position, ReadTimeout, WriteTimeout. </li></ul>
    25. 25. Strumienie <ul><li>Klasa Stream posiada metody takie jak: Close, Flush, Read, ReadByte, Seek, SetLength, Write, WriteByte. </li></ul><ul><li>Klasy które dziedziczą po klasie Stream to miedzy innymi: FileStream, MemoryStream, CryptoStream, NetworkStream, GZipStream. </li></ul>
    26. 26. Jakie klasy pozwalaja na odczyt i zapis danych ? <ul><li>Wiekszość operacji na plikach zaczyna sie od klasy File . </li></ul><ul><li>Klasa File pozwala na: </li></ul><ul><ul><li>Operacje zapisu i odczytu calego pliku, </li></ul></ul><ul><ul><li>Otwieranie, tworzenie plików do odczytu. </li></ul></ul><ul><ul><li>Otwieranie, tworzenie plików do zapisu. </li></ul></ul><ul><ul><li>Proste operacje ( File.Exists, File.Delete, ...) </li></ul></ul>
    27. 27. Strumienie – File <ul><li>Klasa do strumieniowego zapisu danych na plikach nazywa sie FileStream. </li></ul><ul><li>Klasa File posiada podstawowe operacje do otwierania plików w FileStream do zapisu lub odczytu. </li></ul><ul><li>Metody statyczne w File: AppendAllText, AppendText, Copy, Create, CreateText, Move, Open, OpenRead, OpenText, ReadAllBytes, ReadAllLines, ReadAllText, WriteAllBytes, WriteAllLines, WriteAllText. </li></ul>
    28. 28. Strumienie - Directory <ul><li>Klasa Directory jest klasą statyczną. </li></ul><ul><li>Posiada metody służące do manipulacji katalogów takie jak: CreateDirectory, Delete, Exists, GetCreationTime, GetCurrentDirectory, GetDiretiries, GetDirectoryRoot, GetFiles, GetFileSystemEntries </li></ul>
    29. 29. Strumienie <ul><li>FileAccess , enumeracja która ustala poziom uprawnień potrzebnych do otwarcia pliku. ( Read, Write, ReadWrite) </li></ul><ul><li>FileMode , enumeracja która ustala jak dany plik ma być otwarty. ( Append, Create, CreateNew, Open, OpenOrCreate, Truncate). </li></ul>
    30. 30. FileStream <ul><li>Klasa FileStream otwiera pliki do zapisu lub odczytu. </li></ul><ul><li>Najważniejsze właściwości to te które dziedziczy po Stream w dodawtku do kilka innych takich jak: Handle, Name. </li></ul><ul><li>Najważniejsze metody to też te które dziedziczy po Stream w dodatku do: Lock, Unllock . </li></ul>
    31. 31. StreamReader <ul><li>Klasa StreamReader pozwala na udczyt danych ze Strumienia. </li></ul><ul><li>Najważniejsze właściwości to: BaseStream, CurrentEncoding, EndOfStream. </li></ul><ul><li>Najważniejsze metody to: Close, Peek, Read, ReadBlock, ReadLine, ReadToEnd. </li></ul>
    32. 32. Jak czytać z pliku ? <ul><li>FileStream theFile = File.Open (@&quot;C:oot.ini&quot;, FileMode.Open, FileAccess.Read ); </li></ul>Metoda File.Open() zwraca objekt FileStream z otwartym juz plikiem, Jednak używanie klasy FileStream bezposrednio czasem bywa niewygodne. Dlatego warto użyć klasy StreamReader . StreamReader rdr = new StreamReader(theFile); Console.Write(rdr.ReadToEnd()); rdr.Close(); theFile.Close(); Na skróty: Console.WriteLine(File.ReadAllText(@&quot;C:oot.ini&quot;));
    33. 33. StreamWriter <ul><li>Pozwala na zapisywanie danych w strumieniu. </li></ul><ul><li>Najważniejsze właściwości to: AutoFlush, BaseStream, Encoding i NewLine . </li></ul><ul><li>Najważniejsze metody to: Close, Write i WriteLine. </li></ul>
    34. 34. StreamWriter <ul><li>StreamWriter writer = new StreamWriter(theFile); </li></ul><ul><li>writer.WriteLine(&quot;Hello&quot;); </li></ul><ul><li>writer.Close(); </li></ul><ul><li>theFile.Close(); </li></ul><ul><li>StreamWriter writer =File.CreateText(@&quot;c:somefile.txt&quot;); </li></ul><ul><li>writer.WriteLine(&quot;Hello&quot;); </li></ul><ul><li>writer.Close(); </li></ul>Na skróty: File.WriteAllText(@&quot;c:somefile.txt&quot;, &quot;Hello&quot;);
    35. 35. Alternatywy <ul><li>StreamWriter writer = new StreamWriter(theFile); </li></ul><ul><li>StreamWriter writer =File.CreateText(@&quot;c:somefile.txt&quot;); </li></ul><ul><li>File.WriteAllText(@&quot;c:somefile.txt&quot;, &quot;Hello&quot;); </li></ul><ul><li>theFile = File.Open(@&quot;c:somefile.txt&quot;, FileMode.Open, FileAccess.Write); </li></ul><ul><li>theFile = File.OpenWrite(@&quot;c:somefile.txt&quot;); </li></ul><ul><li>theFile = File.Open(@&quot;c:somefile.txt&quot;, FileMode. OpenOrCreate , FileAccess.Write); </li></ul>
    36. 36. Reader i Writer <ul><li>Klasy *Reader i *Writer maja za zadnie </li></ul><ul><li>ułatwić czytanie danych strumieniowych. </li></ul><ul><li>StreamReader dziedziczy po TextReader a </li></ul><ul><li>StreamWriter dziedziczy po TextWriter. </li></ul>
    37. 37. Dane Binarne <ul><li>Nie wszystkie dane są tekstowe. </li></ul><ul><li>Do odczytu danych binarnych używamy BinaryReader . </li></ul><ul><li>Do zapisu danych binarnych używamy BinaryWriter. </li></ul>
    38. 38. Dane Binarne <ul><li>Przykład (zapis): </li></ul><ul><li>FileStream newFile = File.Create(@&quot;c:somefile.bin&quot;); </li></ul><ul><li>BinaryWriter writer = new BinaryWriter(newFile); </li></ul><ul><li>long number = 100; </li></ul><ul><li>byte[] bytes = new byte[] { 10, 20, 50, 100 }; </li></ul><ul><li>string s = &quot;hunger&quot;; </li></ul><ul><li>writer .Write(number); </li></ul><ul><li>writer .Write(bytes); </li></ul><ul><li>writer .Write(s); </li></ul><ul><li>writer .Close(); </li></ul>
    39. 39. Dane Binarne <ul><li>Przykład (otczyt): </li></ul><ul><li>FileStream newFile = File.Open(@&quot;c:somefile.bin&quot;, FileMode.Open); </li></ul><ul><li>BinaryReader reader = new BinaryReader(newFile); </li></ul><ul><li>long number = reader.ReadInt64(); </li></ul><ul><li>byte[] bytes = reader.ReadBytes(4); </li></ul><ul><li>string s = reader.ReadString(); </li></ul><ul><li>reader .Close(); </li></ul><ul><li>Console.WriteLine(number); </li></ul><ul><li>foreach (byte b in bytes) </li></ul><ul><li> Console.Write(&quot;[{0}]&quot;, b); </li></ul><ul><li>Console.WriteLine(); </li></ul><ul><li>Console.WriteLine(s); </li></ul>
    40. 40. Inne typy strumieni <ul><li>MemoryStream – zapis i odczyt bezposrednio do pamięci RAM. </li></ul><ul><li>BufferedStream – poprawia czasem wydajność zapisu strumieni poprzez buforowanie danych. </li></ul>
    41. 41. Kompresja danych <ul><li>W .NET Framework, kompresja danych opiera się o Strumienie Kompresujące. </li></ul><ul><li>Strumienie kompresujące to: GZipStream i DeflateStream. </li></ul><ul><li>Dane które będziemy kompresować są limitowane do 4 GB. </li></ul>
    42. 42. GZipStream <ul><li>Klasa GZipStream pozwala na kompresję danych znajdujących się w innym strumieniu używając metody GZIP. </li></ul><ul><li>GZipStream dziedziczy po Stream . </li></ul>
    43. 43. DeflateStream <ul><li>Pozwala na kompresję danych używając metody Deflate . </li></ul><ul><li>Również bazuję na Stream. </li></ul>
    44. 44. Jak kompresować dane? <ul><li>Kompresja w .NET bazuję na strumieniach, są to jednak innego typu strumienie niż omawiane do tej pory. Strumienie kompresujące zapisuja skompresowane dane do innych strumieni. </li></ul><ul><li>Przykład: </li></ul><ul><li>FileStream sourceFile = File.OpenRead(inFilename); </li></ul><ul><li>FileStream destFile = File.Create(outFilename); </li></ul><ul><li>GZipStream compStream = new GZipStream( destFile, CompressionMode.Compress ); </li></ul><ul><li>int theByte = sourceFile .ReadByte(); </li></ul><ul><li>while (theByte != -1) { compStream .WriteByte((byte)theByte); </li></ul><ul><li>theByte = sourceFile .ReadByte(); </li></ul><ul><li>} </li></ul>
    45. 45. Isolated Storage <ul><li>Co to jest Isolated Storage? </li></ul><ul><li>Klasa IsolatedStorageFile </li></ul><ul><li>Rodzaje Isolated Storage </li></ul><ul><li>Klasa IsolatedStorageFileStream </li></ul>
    46. 46. Jak tworzy ć Isolated Storage? <ul><li>Zdecydować jaki typ IS potrzebujemy. </li></ul><ul><li>IsolatedStorageFile machineStorage = IsolatedStorageFile.GetMachineStoreForAssembly(); </li></ul><ul><li>IsolatedStorageFile userStorage = IsolatedStorageFile.GetUserStoreForAssembly(); </li></ul>
    47. 47. Czytanie i zapis do IS <ul><li>IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForAssembly(); </li></ul><ul><li>IsolatedStorageFileStream userStream = new IsolatedStorageFileStream(&quot;UserSettings.set&quot;, FileMode.Create , userStore); </li></ul><ul><li>StreamWriter userWriter = new StreamWriter(userStream); </li></ul><ul><li>userWriter.WriteLine(&quot;User Prefs&quot;); </li></ul><ul><li>userWriter.Close(); </li></ul><ul><li>IsolatedStorageFileStream userStream = new IsolatedStorageFileStream(&quot;UserSettings.set&quot;, FileMode.Open , userStore); </li></ul>

    ×