Задать вопрос

Работа с файлами в Delhi. Как не сойти с ума?

У меня есть две процедуры.
Первая добавляет в файл запись:
Procedure Add_Rec(app:RecType;way:string);
    var
      f:FileType;
      recc:RecType;
      i:integer;
    begin
      Assign(f,way);
      reset(f);
      while not(Eof(f)) do
        begin
          read(f,recc);
          inc(i);
        end;
      close(f);
      rewrite(f);
      writeln('---',i);
      Seek(f,i);
      write(f,app);
      close(f);
    end;

Причем делать так :
reset(f);
      while not(Eof(f)) do
        begin
          read(f,recc);
          inc(i);
        end;
      close(f);

вместо того чтобы использовать Seek(f, FileSize(f)) мне приходится, так как FileSize всегда возвращает 0(именно в этой процедуре, в остальных работает нормально)

Вторая выводит на экран содержимое файла:
procedure output(way:string);
    var
      f:filetype;
      rec:RecType;
      i:integer;
    begin
      assign(f,way);
      reset(f);
      if filesize(f) > 0 then
        for i:=1 to filesize(f) do
          begin
            read(f,rec);
            writeln('Запись ',i,':');
            writeln('  Марка:    ',rec.model);
            writeln('  Цвет:     ',rec.color_car);
            writeln('  Гос. номер:    ',rec.state_number);
            writeln('  Владелец: ',rec.owner);
          end
      else
        writeln('Файл пуст.');
      close(f);
    end;

Вот результат:d3a0ef767c024e3abbf40475ef5a31e4.jpg
Все записи кроме последней становятся пустыми. Что происходит? Я никак не могу понять.
  • Вопрос задан
  • 343 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
rewrite трет предыдущее содержание файла, используйте append
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@zedxxx
Откройте для себя TFileStream, TMemoryStream и TStringStream - это именно то, что используется в Delphi для работы с файлами.

Обязательные материалы к прочтению:
Сериализация - файлы в стиле Pascal (это про то, как у вас сделано сейчас)
Сериализация - потоки данных (а это про то, как надо делать в мире Delphi)
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Отладчиком смотрите.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы