Obsługa plików - pytanie do piszących w Delphi i C#

0

Bujam się z tym tematem chyba od 2 tygodni...
Chodzi o to że w Delphi jest extra rozwiązany zapis i odczyt z/do pliku binarnego...
tworzy się rekord, umieszcza się w nim jakie mają być dane a potem za pomaca seek'a przechadza sie po tych rekordach i chce znalezc takie rozwiazanie w c# ale nie bardzo moge sie doszukac tego.

Czy jest mi ktoś w stanie wyjaśnić jak miałoby wyglądać wyszukiwanie po rekordach i zapis do pliku w C#?

0

Poczytaj o serializacji obiektow, to rozwiaze caly Twoj problem :) Wystarczy ze bedziesz serializowal / deserializowal tablice obiektow do/z pliku i po klopocie :)

0

No i to by było to, przeczytałem artykuł http://www.codeproject.com/csharp/objserial.asp wszytsko działa ale... tylko na jednym rekordzie :(
Muszę coś robić nie tak bo jak chce zmodyfikować programik tak aby rekord EmpID,EmpName można było zpisywac wielokrotnie to wsztsko jest niby OK - plik rośnie a wyświetlane jest tylko jeden rekord.
Nie mam pojęcia jak zrobić aby wczytać wszystkie rokordy.

W kodzie do zapisywania zmieniłem linie z
Stream stream = File.Open("EmployeeInfo.osl", FileMode.Create);
na
Stream stream = File.Open("EmployeeInfo.osl", FileMode.Append,FileAccess.Write);

i teraz w delphi wystarczyło użyć seek'a aby przechodzić po rekordach tutaj seek' chyba przeskakuje nie po rekordzie ale po bajcie :(

Czy ktoś może napisać czy dobrze dopsuje rekordy do pliku i jak odczytać je z pliku?

0

Hmm jesli nie chcesz wszystkich rekordow odczytywac tylko pojedynczo (a nie zapisywales ich jako tablice, tylko jeden za drugim) to jedyne rozwiazanie jakie mi przychodzi do glowy to petla for i deserializacja od pierwszego rekordu. Np by odczytac 5ty element:
FileStream fs = new FileStream(@"Dane.dat", FileMode.Open)
for (int i = 0; i < 5; i++)
o = bf.Deserialize(fs);
<TwojTyp> rekord = o as <TwojTyp>;

0

Dzięki teraz jest OK, ale, znowu jest jakieś ale...
Jak sprawdzić ile jest zapisanych rekordów w pliku, jest to niezbędne do przeszukiwania rekordów.

W Delphi można było napisać
while not eof(plik)

0

int iloscObiektow = 0;
FileStream fs = new FileStream(@"Dane.dat", FileMode.Open);
while (fs.Position < fs.Length)
{
bf.Deserialize(fs);
iloscObiektow++;
}

0

Jak juz dzisiaj rozmawialem z wasiem, to jesli chcesz przyspieszyc wyszukiwanie, to mozesz zapisywac indeksy rekordow w osobnym (duzo mniejszym) pliku :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1