Fájlkezelés. Szöveges fájlok kezelése

Hasonló dokumentumok
Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Bánsághi Anna 2014 Bánsághi Anna 1 of 35

BME MOGI Gépészeti informatika 13.

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

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Kalapácsvetés 2016 szöveges

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok

ELTE SAP Excellence Center Oktatóanyag 1

File és stream kezelés. Dr. Kotsis Domokos Nagy Tibor

Szöveges fájl kezelése (a Caesar-kód feltörése) A kód feltörésének statisztikai háttere

Input Output Műveletek

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

1. feladat Készítse el szövegszerkesztővel, majd mentse osztály.txt néven a következő tartalmú szöveges fájlt:

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Informatika terméktervezőknek

Programozás alapjai 6. előadás. Wagner György Általános Informatikai Tanszék

Listák, szótárak, fájlok Listák, szótárak, fájlok

Pénzügyi algoritmusok

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

BME MOGI Gépészeti informatika 8.

INFORMATIKAI ALAPISMERETEK

Java gyakorlat feladatai e s megolda sai ( )

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

BME MOGI Gépészeti informatika 4.

Programozási nyelvek Java

1. Alapok. Programozás II

Programozási nyelvek Java

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

C++ programozási nyelv Konstruktorok-destruktorok

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Pénzügyi algoritmusok

PROGRAMOZÁS ALAPFELADATOK

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

INFORMATIKAI ALAPISMERETEK

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Java és web programozás

Fájlműveletek és elszigetelt tárolás

Smalltalk 2. Készítette: Szabó Éva

Készítette: Nagy Tibor István

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

Bevezetés a programozásba I.

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozás II. Fájlkezelés

OOP #14 (referencia-elv)

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Osztályok. 4. gyakorlat

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

A C# programozási nyelv alapjai

Szkriptnyelvek. 1. UNIX shell

7. gyakorlat Sorozatok, Fájlkezelés

Programozás 6. Dr. Iványi Péter

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

A C++ nyelvben a függvény nevek túlterhelésével biztonságosabbá tehetnénk az adatok kiírását és beolvasását.

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

7. gyakorlat. Fájlkezelés IO haladó Függvények haladó

Java programozási nyelv 10. rész Input/output kezelés

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Java és web programozás

Szoftvertechnolo gia gyakorlat

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

BME MOGI Gépészeti informatika 5.

Írjon olyan programot a standard könyvtár alkalmazásával, amely konzolról megadott valós adatokból meghatározza és kiírja a minimális értékűt!

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok

10. ÓRA. Fájlok használata

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

MATLAB. 9. gyakorlat. Cellatömbök, struktúrák, fájlműveletek

Összeállította: Szeli Márk 11. D 2017/18. A C# programozási nyelv. Alapfogalmak

OOP: Java 1.Gy: Java alapok

Szoftvertechnológia alapjai Java előadások

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Java Programozás 11. Ea: MVC modell

C++ programozási nyelv Struktúrák a C++ nyelvben Gyakorlat

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Adatbázisrendszerek I. File-szintű adattárolás C-ben. 1. gyakorlat

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java és web programozás

JAVA PROGRAMOZÁS 8.ELŐADÁS

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Operációs rendszerek 1.

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Programozás I. Első ZH segédlet

INFORMATIKA javítókulcs 2016

Átírás:

Fájlkezelés Fájlnak nevezünk minden háttértárolón található adatot, adathalmazt (pl. szövegszerkesztőben megírt dokumentum, stb.). A fájlok: azonos típusú komponensekből felépülő adatszerkezetek. a programba az adatokat nem csak billentyűzet vagy egér segítségével lehet bevinni, hanem valamilyen háttértárolón tárolt fájlból is be lehet olvasni, főleg nagy mennyiségű adat esetén hasonlóan, a program által előállított adatokat nem csak a képernyőre, hanem fájlba is ki lehet írni C#-ban a fájlok közös műveleteit stream-ekben valósították meg: a stream adatfolyam, a memória és egy külső egység közötti adatáramlás véghezvitelére mielőtt egy fájllal bármilyen műveletet végeznénk, meg kell azt nyitnunk. A fájl megnyitását követően különféle műveleteket végezhetünk. Ezek közül a legfontosabbak az olvasás és az írás. Olvasásnál a fájlból adatokat olvasunk be a memóriába, ami a gyakorlatban egy előzőleg deklarált változó feltöltését jelenti. Ezzel szemben írásnál a memóriából viszünk ki adatokat a fájlba. Az írást és olvasást összefoglalóan I/O (Input- Output) műveleteknek nevezzük a.net számos osztályt biztosít a fájlkezelésre a fájl input-output szolgáltatásokat a system.io névtér osztályai nyújtják Állományfajták Szöveges fájlok soros hozzáféréssel kezelhetjük Bináris fájlok közvetlen hozzáféréssel kezelhetők: tetszőleges elemükre pozícionálhatunk, akkor is, ha ez az elem valahol a fájl belsejében helyezkedik el Xml XmlTextReader és XmlTextWriter osztályok állnak a rendelkezésünkre (Az XML általános célú leírónyelv, amelynek elsődleges célja strukturált szöveg és információ megosztása az interneten keresztül.) Szöveges fájlok kezelése a szöveges fájlokban levő adatok egyszerű szerkesztőprogramokkal (notepad) megtekinthetők a szöveges állományokban az adatok szöveg formátumban vannak a szöveges formájú adatok sorokra vannak tördelve a szöveges fájl input-output műveletek osztályai a StreamReader és StreamWriter osztályok ehhez szükségünk van a System.Text névtérre 1

Szöveges fájl megnyitása olvasásra text fájlok olvasásra való megnyitására a StreamReader osztályból kell példányosítani a StreamReader osztály konstruktorának paraméterként meg kell adni a megnyitandó fájl nevét (kötelező) és meg lehet adni a kódlapot, amellyel a fájl tartalma íródni fog (alapértelmezésként a Default, amit a Windows aktuálisan is használ) ha a fájl nem a program saját könyvtárában van, akkor a teljes elérési utat is meg kell adni az elérési útvonalnál vigyázni kell, mert a backslash ( \ ) karakternek speciális jelentése van, ezért egyetlen backslash leírásához dupla \\ kell, vagy használjuk a @ jelet az elérési út előtt, amivel az utána következő sztring literál minden karakterét normális karakterként fogja értelmezni C:\\Mappa1\\Mappa2\\proba.txt vagy @ C:\Mappa1\Mappa2\proba.txt Pl.StreamReader f = new StreamReader("c:\\proba.txt", Encoding.Default); előfordulhat, hogy a fájl tartalmának kiírásakor az ékezetes karakterek helyett kérdőjel jelenik meg. Ez azért van, mert az éppen aktuális karaktertábla nem tartalmazza ezeket a karaktereket, ez tipikusan nem magyar nyelvű operációs rendszer esetén fordul elő: megadjuk a kódlapot: Pl. StreamReader f = new StreamReader (@"c:\proba.txt",encoding.getencoding("iso-8859-2")); szöveges fájl olvasásra való megnyitására használhatjuk a File osztály OpenText metódusát is Pl. StreamReader f = File.OpenText(@"D:\GME\tanszek-2013-2014\C#\pr1.txt"); Szöveges fájl olvasása miután megnyitottuk a fájlt olvasásra, utána olvashatjuk a tartalmát a textfájlokban az adatok sorokra vannak bontva egy lépésben általában egy sort szoktunk kiolvasni a ReadLine() metódussal Pl. StreamReader f = new StreamReader("c:\\proba.txt"); string s = f.readline(); minden ReadLine()-al történő olvasási művelet során automatikusan lépünk a fájlban a következő sorra a ReadLine() többszöri alkalmazása révén eljutunk a fájl végéig karakterenként is kiolvashatjuk a fájl tartalmát a Read() függvénnyel, melynek visszatérési értéke a kiolvasott karakter kódja a Read()-el történő olvasáskor automatikusan lépünk a fájlban a következő karakterre Pl. char c = (char)f.read(); 2

Fájl végének elérése a fájlból való folyamatos olvasás esetén előbb-utóbb elérjük a fájl végét a fájl végének elérésekor a kiolvasott sztring null értéket vesz fel Pl. string s= f.readline(); while(s!=null) Console.WriteLine(s); s=f.readline(); fájl végének elérését le tudjuk kérdezni a Peek() metódus segítségével: a Peek() a soron következő bájt értékét adja meg anélkül, hogy a pozíciót léptetné; ha nincs következő bájt, vagyis elértük a fájl végét, akkor a Peek() által visszaadott érték -1 Pl. string s; while (f.peek()!= -1) s = f.readline(); Console.WriteLine(s); Pozícionálni nem lehet a szöveges fájlban. Szöveges fájl megnyitása írásra szöveges állományok írásra való megnyitására a StreamWriter osztályból kell példányosítani a StreamWriter osztály konstruktorának első paraméterként meg kell adni a fájl nevét az elérési útvonallal együtt, második paraméterként megadhatjuk a hozzáfűzés módját, ami lehet: false (ez az alapértelmezett) létező fájl esetén törli a tartalmát, true hozzáírásra nyitja meg a fájlt; harmadik paraméterként megadhatjuk a kódlapot, ugyanúgy, mint az olvasásnál Pl. StreamWriter f = new StreamWriter(@"C:\proba2.txt", true, Encoding.UTF8); első paraméter: proba2.txt a fájl neve, amelybe írni szeretnénk második paraméter: true ha létezik a fájl, akkor annak tartalma megmarad és amit most írunk bele, az annak a végére fog íródni (append) harmadik paraméter: Encoding.Default a fájlbaírás kódlapját adja meg, ami jelen esetben a Windows-unkban használt kódlap a File osztály AppendText és CreateText metódusai is rendelkezésünkre állnak szöveges fájl létrehozására illetve létező fájl megnyitására 3

Pl. StreamWriter f = File.AppendText(@"C:\proba.txt"); - megnyitja a fájlt írásra: ha létezett, az állomány végére pozicionál és íráskor oda ír, ha nem létezett, akkor létrehozza Szöveges fájl írása miután megnyitottuk a fájlt írásra, a Write() és WriteLine() metódusok segítségével írhatunk bele a két metódus használata megegyik a konzolos metódusokkal, csak most nem a konzolra, hanem az f -el azonosított fájlba írunk Pl. StreamWriter f = new StreamWriter(@"C:\proba2.txt", true, Encoding.UTF8); f.writeline(console.readline()); int t = 12; double u=6.23; f.write(t+" "+u); a WriteLine() a kiírás végén egy sorvége jelet is ír a fájlba, több WriteLine() használata esetén minden kiírás adatai új sorba kerülnek File bezárása megnyitott fájlt a Close() metódussal tudunk bezárni amennyiben elfelejtünk bezárni egy írásra megnyitott fájlt, akkor bizonyos mennyiségű adatmódosítás elveszhet Pl. f.close(); Feladatok 1. Egy szöveges állomány minden második sorát írassuk ki a képernyőre. string fnev; Console.Write("Allomany neve utvonallal egyutt:"); fnev = Console.ReadLine(); StreamReader f = File.OpenText(@fnev); while (f.peek()!= -1) Console.WriteLine(f.ReadLine()); f.readline(); Console.ReadKey(); 2. Töltsünk fel egy szöveges állományt egy csoport névsorral, és minden egyes név után az egyes személyek életkora legyen található. A szöveges állományban található személyek átlag életkorát számold ki. struct szemely 4

public string nev; public int eletkor; static void Main(string[] args) szemely a = new szemely(); StreamWriter f = new StreamWriter(@"feladat2.txt"); int n; Console.Write("Szemelyek szama:"); n = int.parse(console.readline()); for (int i = 1; i <= n; i++) Console.Write("0. szemely neve:", i); a.nev = Console.ReadLine(); Console.Write("0. szemely eletkora:", i); a.eletkor = int.parse(console.readline()); f.writeline(a.nev+"_"+a.eletkor.tostring()); f.close(); StreamReader g = new StreamReader(@"feladat2.txt"); string[] s; double atl = 0, sz=0; while (g.peek()!=-1) s = g.readline().split('_'); a.nev= s[0]; a.eletkor = int.parse(s[1]); atl = atl + a.eletkor; sz++; g.close(); Console.WriteLine("Csoport atlageletkotra: 0", atl/sz); Console.ReadKey(); Bináris fájlok kezelése A bináris állományok bináris formátumban tárolják az adatokat ugyanúgy, mint ahogy a memóriában vannak tárolva, ezért az adatok írása a memóriából a bináris fájlokba, illetve fordítva, a bináris fájlokból az adatok visszaolvasása a memóriába nagyon gyors Bináris fájl megnyitása egy fájl megnyitásához példányosítani kell a FileStream osztályt egy FileStream objektum létrehozásakor a FileStream konstruktorának leggyakrabban 4 paramétert szoktak megadni: 1. fájl neve (ha szükséges az elérési útvonallal együtt) - kötelező 2. megnyitás módja (FileMode) 5

3. fájlelérés (FileAcces) 4. megosztás módja (FileShare) 1. Fájl neve: ez az első paraméter ha a fájl nem a program saját könyvtárában van, akkor a teljes elérési utat is meg kell adni az elérési útvonalnál vigyázni kell, mert a backslash ( \ ) karakternek speciális jelentése van, ezért egyetlen backslash leírásához dupla \\ kell, vagy használjuk a @ jelet az elérési út előtt, amivel az utána következő sztring literál minden karakterét normális karakterként fogja értelmezni pl. C:\\Mappa1\\Mappa2\\proba.txt vagy @ C:\Mappa1\Mappa2\proba.txt 2. Megnyitás módja: - a FileMode enum-nak a következő értékei lehetnek: Open létező fájl megnyitása, ha nem létezik, akkor kivételt dob a program Append létező fájlt megnyit és automatikusan a végére áll, illetve ha nem létezik, akkor létrehozza Create új fájlt hoz létre, ha már létezett, akkor törli a tartalmát OpenOrCreate megnyit egy létező fájlt, ha nem létezik, akkor létrehozza Truncate megnyit egy létező fájlt és törli a tartalmát 3. Fájlelérés: - beállíthatjuk, hogy pontosan mit akarunk csinálni az állománnyal Read olvasunk a fájlból Write írunk a fájlba ReadWrite olvasásra és írásra nyitjuk meg a fájlt 4. Megosztás módja: - beállíthatjuk, ahogy más folyamatok férnek hozzá a fájlhoz: None amíg a fájl meg van nyitva, addig más folyamat nem férhet hozzá a fájlhoz Read más folyamat csak olvashatja a fájlt Write más folyamat csak írhatja ReadWrite más folyamat írhatja is és olvashatja is a fájlt Delete nem magát a fájlt, hanem a fájlból törölhet más folyamat Pl.1. FileStream f = new FileStream(@"c:\proba1.dat", FileMode.Open); Pl.2 FileStream f = new FileStream(@"c:\teszt1.dat", FileMode.Open, FileAccess.Read); Pl.3 FileStream f = new FileStream(@"c:\teszt2.dat", FileMode.Create,FileAccess.Write); bináris fájlok megnyitására használhatjuk a File osztály Open(), Create() metódusait is 6

Olvasás bináris fájlból olvasáshoz a BinaryReader osztályt használjuk egy BinaryReader objektum létrehozásakor meg kell adni a konstruktornak egy FileStream típusú objektumot: FileStream f = new FileStream(@"c:\proba1.dat", FileMode.Open); BinaryReader b = new BinaryReader(f); az olvasás a ReadXXXX() függvény segítségével történik (ReadChar, ReadInt32, ReadDouble, stb.) megnyitás után az első olvasás a fájl legelső pozíciójától hajtódik végre minden olvasási művelettel a következő adatra lépünk a fájlban (például egy ReadInt32() olvasási művelettel 4 bájttal lép előre a fájlban, mert egy Int32 típusú adat 4 bájton van tárolva) Pl. double d;int a; a = b.readint32(); d = b.readdouble(); Fájl végének elérése fájl végének elérését le tudjuk kérdezni a PeekChar() metódussal a PeekChar() metódus a soron következő bájt értékét adja vissza, illetve -1-et, ha elértük a fájl végét a PeekChar() a folyambeli aktuális pozíciót nem változtatja meg Pl. ha a fájlban 20 darab egész szám van: int[] a=new int[20]; int i = 0; while (b.peekchar()!= -1) a[i++] = b.readint32(); Pozicionálás fájlban bináris állományoknál lehetőségünk van a fájlmutató állítására: visszatérhetünk egy korábbi adatra, újból kiolvashatjuk, átugorhatunk bizonyos részt feldolgozás nélkül, stb. a Seek() metódussal tudunk fájlon belül pozícionálni: első paraméterként meg kell adni egy egész számot, második paraméterként pedig a szám értelmezését az értelmezést a SeekOrigin enum tartalmazza o Begin: ha a második paraméter SeekOrigin.Begin, akkor az első szám annak a bájtnak a sorszámát tartalmazza, amelyikre pozícionálni akarunk. Az első bájt sorszáma 0 és a sorszámozás a fájl elejétől kezdődik 7

o End: az első szám annak a bájtnak a sorszámát tartalmazza a fájl végétől visszafele számolva, amelyikre pozícionálni akarunk. Az utolsó bájt sorszáma 0 és a sorszámozás visszafele halad o Current: az első szám határozza meg, hogy hány bájttal kell előre (pozitív érték) vagy visszafele pozícionálni (negatív érték) az aktuális pozíciótól mérve Pl. Minden második egész szám kiolvasása egy bináris fájlból: FileStream f = new FileStream(@"c:\users\user\desktop\proba2.dat", FileMode.Open); BinaryReader b = new BinaryReader(f); int k = 0; long t = f.length; // t a fájl mérete bájtban int[] a = new int[t/8+1]; // mivel egy adat 4 bájtos, így összesen t/4 adat van, nekünk meg cask a felére van szükségünk while (b.peekchar()!= -1) a[k++] = b.readint32(); f.seek(4, SeekOrigin.Current); Írás bináris fájlba íráshoz a BinaryWriter osztályt használjuk egy BinaryWriter objektum létrehozásakor meg kell adni a konstruktornak egy FileStream típusú objektumot: Pl. FileStream g = new FileStream(@"C:\proba2.dat",FileMode.Append, FileAccess.Write); BinaryWriter bw = new BinaryWriter(g); az írás a Write() függvény segítségével történik megnyitás után a fájlíró az állomány első pozícióján áll, hacsak nem hozzáfűzésre nyitottuk meg az állományt (Append), amikor a fájlíró az állomány végén áll minden írási művelet során lépünk a fájlban a megfelelő mennyiségű bájttal (pl. ha egész típusú adatot írunk a fájlba, akkor 4 bájtot lép előre) Pl. 20 véletlen egész számot írjunk a proba2.dat végére FileStream g = new FileStream(@"C:\ proba2.dat", FileMode.Append); BinaryWriter bw = new BinaryWriter(g); Random r = new Random(); for (int i = 0; i < 20; i++) bw.write(r.next(100)); bw.close(); File bezárása a Close() metódussal akár a BinaryReader vagy BinaryWriter példányt, akár a FileStream példányt is használhatjuk lezárásra Pl. bw.close(); vagy g.close(); 8

Feladat 1. Töltsünk fel egy bináris állományt egy csoport névsorral, és minden egyes név után az egyes személyek életkora legyen található. A beolvasott bináris állományt bontsuk fel két szöveges állományra aszerint, hogy az illető személy neve meghaladja-e a 12 karaktert. struct szemely public string nev; public int eletkor; static void Main(string[] args) szemely a = new szemely(); FileStream f = new FileStream("feladat1.dat", FileMode.Create, FileAccess.Write); BinaryWriter bw = new BinaryWriter(f); int n; Console.Write("Szemelyek szama:"); n = int.parse(console.readline()); for (int i = 1; i <= n; i++) Console.Write("0. szemely neve:", i); bw.write( Console.ReadLine()); Console.Write("0. szemely eletkora:", i); bw.write(int.parse(console.readline())); bw.close(); f.close(); f= new FileStream("feladat1.dat", FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(f); StreamWriter f1 = new StreamWriter("sz1.txt"); StreamWriter f2 = new StreamWriter("sz2.txt"); while (br.peekchar()!=-1) a.nev= br.readstring(); a.eletkor = br.readint32(); if (a.nev.length > 12) f2.writeline(a.nev + "_" + a.eletkor.tostring()); else f1.writeline(a.nev + "_" + a.eletkor.tostring()); br.close(); f1.close(); f2.close(); f.close(); Console.ReadKey(); 9