Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Запись/чтение структуры в/из файл


Автор: Firex 7.9.2011, 16:53
Записывает структуру правильно(вроде, т.к. ошибок нет), а вот при чтении возникает ошибка(крах).
Процедура записи:
Код

var
i:integer;
begin
if SaveDialog1.Execute then begin
FileNameZ:=SaveDialog1.FileName;
AssignFile(Fz,FileNameZ);
Rewrite(Fz);
for i:=0 to count do write(Fz,Base[i]);
end;

Процедура чтения:
Код

begin
if OpenDialog1.Execute then begin
FileNameZ:=OpenDialog1.FileName;
AssignFile(Fz,FileNameZ);
reset(Fz);
count:=0;
while (not Eof(Fz)) do begin
read(Fz,Base[count]);
ListBox1.Items[count]:=Base[count].name+','+IntToStr(Base[count].cost)+','+IntToStr(Base[count].exp)+','+IntToStr(Base[count].rel)+','+IntToStr(Base[count].com);
inc(count);
end;
end;
end;

Ошибка при чтении "I/O 103"(RAD Studio)

Автор: Данкинг 7.9.2011, 17:09
Я при открытии что-то AssignFile и иже с ним не нашёл.

Автор: Firex 7.9.2011, 17:18
Извиняюсь, почему-то код не весь скопировался, в теме поправил. У меня в коде это есть.

Автор: Данкинг 7.9.2011, 18:29
Цитата(Firex @  7.9.2011,  18:18 Найти цитируемый пост)
У меня в коде это есть. 

Ну хорошо, теперь я в коде reset'а не вижу. smile 

Автор: Firex 7.9.2011, 20:05
Добавил, ошибка исчезла)) за это спс. Небольшая проблема: не правильно считывает первый элемент, и перечитывает 1 лишний элемент, оба они заносятся в массив пустыми( Может быть неправильно записывает в файл?).

Автор: Данкинг 7.9.2011, 21:46
Не знаю, попробуй readln вместо read.

Автор: Firex 8.9.2011, 09:02
Проблема решилась путём правильного выставления счётчиков, теперь всё работает как надо:
Запись
Код

procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
begin
if SaveDialog1.Execute then begin
FileNameZ:=SaveDialog1.FileName;
AssignFile(Fz,FileNameZ);
Rewrite(Fz);
for i:=1 to count-1 do begin
write(Fz,Base[i]);
showmessage(Base[i].name);
end;

Чтение
Код

procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then begin
FileNameZ:=OpenDialog1.FileName;
AssignFile(Fz,FileNameZ);
reset(Fz);
count:=1;
while (not Eof(Fz)) do begin
read(Fz,Base[count]);
ListBox1.Items[count-1]:=Base[count].name+','+IntToStr(Base[count].cost)+','+IntToStr(Base[count].exp)+','+IntToStr(Base[count].rel)+','+IntToStr(Base[count].com);
inc(count);
end;
end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)