Vizuális és eseményvezérelt programozás 2006–2007, II. félév BMF NIK
Fájlok, stream-ek Fájlok és könyvtárak Stream-ek csoportosítása A stream-ek osztályhierarchiája Stream-ek használata
Nagy Tibor © BMF NIK, 2006–2007
Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges.
V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
2
IO-kezelés • System.IO névtér típusai – File, FileInfo Fájlok és jellemzőik kezelése – Directory, DirectoryInfo Könyvtárak és jellemzőik kezelése – FileStream Olvasás/írás fájlból/fájlba – StreamReader / StreamWriter Szöveg típusú adatok olvasása/írása – BinaryReader / BinaryWriter Különböző típusú adatok olvasása/írása – Felsorolás típusok a fájlnyitási módok, fájlhozzáférés, fájlmegosztás, és egyéb beállítások megadásához
• System.IO.Compression névtér típusai – DeflateStream / GZipStream Adat betömörítése, kitömörítése V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
3
A File osztály • Statikus osztály, háttértáron elhelyezkedő fájlok kezelésére • Metódusai: – – – – – – – –
Create(string path, int bufferSize, FileOptions options) Copy(string sourceFileName, string destFileName) Move(string sourceFileName, string destFileName) Delete(string path) Exists(string path) GetAttributes(string path) SetAttributes(string path, FileAttributes attributes) GetCreationTime(string path)
…
• Nem statikus változata a FileInfo osztály
V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
4
A Directory osztály • Statikus osztály, háttértáron elhelyezkedő könyvtárak kezelésére • Metódusai: – – – – – – – …
CreateDirectory(string path) Exists(string path) Delete(string path, bool recursive) GetDirectories(string path) GetCurrentDirectory(), SetCurrentDirectory(string path) GetFiles(string path) GetParent(string path)
• Nem statikus változata a DirectoryInfo osztály
V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
5
A Path osztály • Fájlnevet és elérési utat tartalmazó sztring részekre bontására használható • Metódusai: – – – – …
V1.0
GetDirectoryName(string path) GetFileName(string path) GetExtension(string path) GetFileNameWithoutExtension(string path)
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
6
Feladat 1. • Készítsen grafikus felületű alkalmazást, amely az aktuális könyvtár tartalmát egy listadobozban jeleníti meg, illetve a listadobozban kijelölt fájlról/könyvtárról információkat (név, könyvtárnév, attribútumok, létrehozás dátuma, ideje) ír ki egy MessageBoxban. • Házi feladat: Az alkalmazást bővítse ki úgy, hogy a kijelölt fájlt lehessen törölni, illetve másolni, mozgatni egy megadott helyre.
V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
7
Stream-ek osztályhierarchiája
V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
8
Stream-ek csoportosítása • Fizikai stream-ek Közvetlenül egy adott médiára ír/médiáról olvas – Média: • • • •
Memória (puffer, sztring, karaktertömb) Háttértár (fájl) Hálózat (ennek a tananyagnak nem témája) Soros port (ennek a tananyagnak nem témája)
– FileStream – MemoryStream – StringReader, StringWriter
• Logikai stream-ek Egy másik stream-re ír/stream-ről olvas – – – – V1.0
BinaryReader, BinaryWriter StreamReader, StreamWriter BufferedStream DeflateStream, GZipStream
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
9
Stream-ek használata • Megnyitás: – A megfelelő stream-osztály példányának létrehozásával pl.: StreamReader sr = new StreamReader("proba.txt"); – A File osztály metódusai (Create, Open, OpenRead, OpenWrite, CreateText, OpenText, AppendText) segítségével pl.: StreamReader sr=File.OpenText("proba.txt");
• Bezárás: – A stream Close() metódusával pl.: sr.Close();
• Pozicionálás: – A stream-ek nagy része soros hozzáférésű. A pozícionálás ezeknél az író/olvasó metódusokkal történik. – A közvetlen hozzáférésű stream-ek esetén lehetőség van a pozícionálásra a Seek(long offset, SeekOrigin origin) metódus segítségével. A SeekOrigin { Begin, End, Current } felsorolás konstansaival adható meg, hogy honnan számítva mozduljon el offset byte-tal a fájlpointer. (FileStream, MemoryStream, BufferedStream) V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
10
A using utasítás • Szintaxisa using (objektum-létrehozás) {
utasítások; } • A paraméterként létrehozott objektum(ok) által foglalt memóriaterület automatikus felszabadítása az utasításblokk végén (nem kell várni a GC-re) • Példa: using (StreamReader sr = new StreamReader(("proba.txt")) )) ( { string s, s1 = ""; while((s while = sr.ReadLine()) != null) null s1 += s + "\n"; MessageBox.Show((s1); ); sr.Close(); (); } V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
11
StreamWriter • Szövegek fájlba írása meghatározott kódolás szerint StreamWriter(Stream s) StreamWriter(string filename) StreamWriter(string path, Encoding enc) StreamWriter(string path, bool append) StreamWriter(string path, bool append, Encoding enc) StreamWriter(string path, bool append, Encoding enc, int buffersize)
• Metódusai – Write(…) : adott típusú adat kiírása – WriteLine(…) : adott típusú adat kiírása soremeléssel
• Tulajdonságai – NewLine : az újsor karakter – AutoFlush : kiíródjon-e minden Write() után a kiírandó adat?
• Kódolás – Az Encoding osztály statikus tulajdonságai (pl.: Encoding.UTF8)
V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
12
StreamReader • Adat olvasása szövegfájlból meghatározott kódolás szerint StreamReader(Stream s) StreamReader(string filename) StreamReader(string path, Encoding enc) StreamReader(string path, bool append) StreamReader(string path, bool append, Encoding enc) StreamReader(string path, bool append, Encoding enc, int buffersize) • Metódusai – – – –
Read() : egy karaktert olvas Read(char[] buffer, int offset, int count) : tömbbe olvas count darab karaktert ReadLine() : egy sort olvas Peek() : egy karakter előreolvasása
• Tulajdonságok: – EndOfStream : jelzi a stream végét
• Kódolás – Az Encoding osztály statikus tulajdonságai (pl.: Encoding.UTF8) V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
13
Feladat 2. • Az előző feladat kibővítéseként a listadobozban tárolt minden fájlról és könyvtárról írja ki az információkat egy szövegfájlba
V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
14
FileStream • Adatok fájlba írása/ fájlból olvasása bájtonként FileStream(string path, FileMode mode) FileStream(string path, FileMode mode, FileAccess access) FileStream(string path, FileMode mode, FileAccess access, FileShare share) FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize)
• Metódusai – – – – –
Read(byte[] buffer, int offset, int count) ReadByte() Write(byte[] buffer, int offset, int count) WriteByte() Seek(long offset, SeekOrigin origin)
• Tulajdonságai – Length – Position V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
15
Felsorolás típusok • Fájlmegnyitás módja: • FileMode { Append hozzáfűzés. Ha nem létezik a fájl, létrehozza Create új fájl. Ha a fájl létezik, akkor felülírja CreateNew új fájl. Ha a fájl létezik, IOException Open fájl megnyitása. Ha a fájl nem létezik, FileNotFoundExc. OpenOrCreate megnyit, vagy létrehoz Truncate törlés és újralétrehozás } • A fájlhozzáférés módja FileAccess { Read, ReadWrite, Write } • Meghatározza, hogy más streamek milyen módon férhetnek hozzá ehhez a fájlhoz, amíg nyitva van: FileShare { Delete, None, ReadWrite, Write, Read } • Egyéb beállítások FileOptions { Asynchronous, DeleteOnClose, Encrypted, None, RandomAccess, SequentialScan, WriteThrough } V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
16
BinaryReader / BinaryWriter • Primitív típusú adatok beolvasását / kiírását teszik lehetővé BinaryReader(Stream input) BinaryReader(Stream input, Encoding encoding) BinaryWriter(Stream input) BinaryWriter(Stream input, Encoding encoding) • Metódusaik: – ReadX() – WriteX(X data) – X helyére a primitív típus .NET osztálykönyvtárbeli nevét kell behelyettesíteni pl.: ReadDouble(), ReadSingle(), …
V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
17
MemoryStream • A memóriából tud olvasni / memóriába tud írni MemoryStream(int capacity) MemoryStream(byte[] buffer) MemoryStream(byte[] buffer, bool writable) … • Metódusai: – – – – – –
Read(byte[] buffer, int offset, int count) ReadByte() Write(byte[] buffer, int offset, int count) WriteByte() Seek(long offset, SeekOrigin origin) WriteTo(Stream dest)
• Tulajdonságai: – Capacity – Length – Position V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
18
DeflateStream / GZipStream • Adatok betömörítésére és kitömörítésére használható DeflateStream(Stream stream, CompressionMode mode) GZipStream(Stream stream, CompressionMode mode) • A tömörítés iránya: CompressionMode { Compress, Decompress } • Metódusai: – – – – –
Read(byte[] buffer, int offset, int count) ReadByte() Write(byte[] buffer, int offset, int count) WriteByte() Seek(long offset, SeekOrigin origin)
• Tulajdonságai: – Length – Position V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
19
Feladat 3. • Az előző feladat bővítése úgy, hogy a listadobozban kijelölt fájlt be lehessen tömöríteni megadott néven, ill. ki lehessen tömörítenik egy megadott helyre.
V1.0
2007. április 1.
Nagy Tibor © BMF NIK, 2006–2007
20