Seek i blad I/O 87

0

Witam ;-)

Mam kod:

par:='jakiś_tam_plik.bin';

assignfile(F, par);
reset(F, 1);
seek(F, nr * sizeOf(TParagraf)); // error
blockwrite(F, paragraf, sizeOf(TParagraf));

closefile(F);

W linii zaznaczonej (// error) kompilator wywala mi błąd I/O 87. Szukałem o nim informacji w helpie, ale nie bylo :-/. Dodam, ze jak usune ta linijke, to wszystko gra (tyle, że ta linia i tak musi tam być).

Wie ktoś, jak rozwiazac ten problem?

0

A czym jest ten TParagraf, bo dla zwykłych typów (ineger dokładnie) się kompiluje bez bólów.

0

TParagraf to duży rekord opisujacy jeden paragraf w grze:

TParagraf = record

opis: array [100000] of chars;
nr: integer;
pierwsza: string(255);
(...)
osma: string(255);

pierwszanr: string(4);
(...)
osmanr: string(4);
0

Do zapisywania struktur służą pliki typowane (bez problemu znajdziesz w wyszukiwarce serwisowej)

0

zapewne próbujesz wyjechać poza rozmiar pliku (seek beyond end of file). sprawdź, co zawiera zmienna nr (dla pierwszego rekorku powinna był równa 0), jak również sprawdź przed resetem czy plik istnieje.

PiXel napisał(a)

Do zapisywania struktur służą pliki typowane (bez problemu znajdziesz w wyszukiwarce serwisowej)

Do zapisu struktur służą dowolne pliki binarne, w tym i amorficzne.

0

Z tym może być mały problem. Tak, zgadza się, wywala mi błąd "seek beyond the end of file", plik istnieje, a pierwszy paragraf mial nr 1... :). Ale jak użytkownik wpisze, tak bedzie - czyli moga mu wyskakiwac takie bledy, bo konstrukcja programu na to pozwala.

Program sluzy do tworzenia gierek paragrafowych. Dziala to tak:

  1. Jest zakladka, na której znajduja sie: combobox (lista paragrafow), button "dodaj", button "usuń" i button "zapisz". Do tego kontrolki, w których znajduje sie opis paragrafu (opis lokacji, kolejne kroki itp).
  2. Użytkownik klika but "dodaj", aby dodać nowy paragraf (wyskakuje monit o podanie numeru); numer paragrafu dodaje sie do comboboxa i wszystkie kontrolki odpowiadajace za opisanie paragrafu sa czyszczone.
  3. Użytkownik wpisuje dane dotyczace paragrafu i klika przycisk "zapisz" (wykonywana jest procedura która napisałem powyżej).

Jeśli użytkownik jako pierwszy paragraf wpisze nr np 8 (a wolno mu), to program zapisze rekord pod numerem 8... I wyskoczy blad :). Mysle, ze dobrze bedzie dodac do rekordu integer "nr", w którym bedzie zapisany numer, który wpisał użytkownik, ale rekordy beda sie zapisywaly po kolei...

... Jednak wtedy bede mial problem z odczytem... W trakcie dzialania gry bede musial miec szybko dostep do rekordow, które maja nr TAKI, JAK WPISAL UZYTKOWNIK. Czyli w gre wchodzi jeszcze sortowanie duzej liczby rekordów, czego juz nie jestem w stanie zrobic ;). Co o tym wszystkim myślicie?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.