записываю в файл таким образом:
begin
if SaveDialog1.Execute then
AssignFile(Fi,'itogi.dat');
if (s=0)then rewrite(fi);
Reset(Fi);
EOF(fi);
Student.fam:=fam;
Student.imya:=imya;
Student.otch:=otch;
Student.spec1:=spec1;
Student.spec2:=spec2;
Student.spec3:=spec3;
Student.ball:=ball;
Write(Fi,Student);
seek(Fi,s);
s:=s+8;
CloseFile(Fi);
end;
а открываю вот так:
if OpenDialog1.Execute then
begin
AssignFile(Fi,'itogi.dat');
Reset(Fi);
Repeat
Read(Fi,Student);
Form3.Memo1.Lines.Add(student.fam);
Until EOF(Fi);
CloseFile(Fi);
end;
Student- это запись
в результате, когда вывожу в MEMO, выводится только последнее записанное значение в файл
как сделать, чтобы выводилась и записывалась вся информация?
Другие языки программирования и технологии
Проблема с записью в файл в делфи
Внимательно смотрим на написанное
begin
if SaveDialog1.Execute then
AssignFile(Fi,'itogi.dat'); {а если не Execute, то тоже выпонять то, что дальше? (в предыдущей строке после then нет begin)}
if (s=0)then rewrite(fi); {что такое s и почему оно должно равняться нулю? подозреваю, что таки s=0 и файл перезаписывается}
Reset(Fi); {открываем файл и устанавливаем указатель на начало, т. е. на первую запись}
EOF(fi); {вообще не понятно для чего это}
Student.fam:=fam; {здесь все ясно}
Student.imya:=imya;
Student.otch:=otch;
Student.spec1:=spec1;
Student.spec2:=spec2;
Student.spec3:=spec3;
Student.ball:=ball;
Write(Fi,Student); {записали}
seek(Fi,s); {куда-то перешли (чему же все-таки равно s?)}
s:=s+8; {зачем-то инкрементировали s}
CloseFile(Fi); {и закрыли файл в котором возможно всего одна запись}
end;
Во-первых, не понятны пляски с переменной s.
Во-вторых, для чего вам вообще эти заморочки с s, если проверить существование файла можно функцией FileExists(const FileName: string): Boolean;
В-третьих, позиционировать указатель на конец файла нужно так: Seek(F, FileSize(F));
Ну и на всякий случай, в-четвертых. Получить количество записей в типизированном файле можно так
N := FileSize(F);
а процедура Seek(F, N) устанавливает указатель на нужную запись (нумерация начинается с нуля) .
Ухожу на работу, так что вопросы в комментах только вечером или велком в аську 158-419-452 часа через три.
begin
if SaveDialog1.Execute then
AssignFile(Fi,'itogi.dat'); {а если не Execute, то тоже выпонять то, что дальше? (в предыдущей строке после then нет begin)}
if (s=0)then rewrite(fi); {что такое s и почему оно должно равняться нулю? подозреваю, что таки s=0 и файл перезаписывается}
Reset(Fi); {открываем файл и устанавливаем указатель на начало, т. е. на первую запись}
EOF(fi); {вообще не понятно для чего это}
Student.fam:=fam; {здесь все ясно}
Student.imya:=imya;
Student.otch:=otch;
Student.spec1:=spec1;
Student.spec2:=spec2;
Student.spec3:=spec3;
Student.ball:=ball;
Write(Fi,Student); {записали}
seek(Fi,s); {куда-то перешли (чему же все-таки равно s?)}
s:=s+8; {зачем-то инкрементировали s}
CloseFile(Fi); {и закрыли файл в котором возможно всего одна запись}
end;
Во-первых, не понятны пляски с переменной s.
Во-вторых, для чего вам вообще эти заморочки с s, если проверить существование файла можно функцией FileExists(const FileName: string): Boolean;
В-третьих, позиционировать указатель на конец файла нужно так: Seek(F, FileSize(F));
Ну и на всякий случай, в-четвертых. Получить количество записей в типизированном файле можно так
N := FileSize(F);
а процедура Seek(F, N) устанавливает указатель на нужную запись (нумерация начинается с нуля) .
Ухожу на работу, так что вопросы в комментах только вечером или велком в аську 158-419-452 часа через три.
значит в файле только одна запись
а если так
// Повторное открытие для добавления в конец файла
Append(myFile);
вместо reset()
и ф-ия EOF(F) не устанавливает указатель в конец файла, а только сигнализирует если достигнут конец файла
поменять
if (s=0)then rewrite(fi);
Reset(Fi);
EOF(fi);
на
if (s=0) then rewrite(fi)
else append(fi);
и с seek() что то мутно у вас.
а если так
// Повторное открытие для добавления в конец файла
Append(myFile);
вместо reset()
и ф-ия EOF(F) не устанавливает указатель в конец файла, а только сигнализирует если достигнут конец файла
поменять
if (s=0)then rewrite(fi);
Reset(Fi);
EOF(fi);
на
if (s=0) then rewrite(fi)
else append(fi);
и с seek() что то мутно у вас.
Максим Тутункин
append только для текстовых файлов. у меня типизированный
Похожие вопросы
- Запись в файл структуры данных. С++
- turbo pascal операции записи в файл
- Делфи. работа с аудио файлами.
- переставил два харда на другой комп, установил винду, теперь эта проблема с многими файлами и папками на одном из дисков
- .bat файл изменение записей реестра
- надо решить задачку через делфи и паскаль)))
- Вопрос по делфи
- языки делфи и си
- Скажите сколько месяцев нужно изучать Делфи что бы написать программу вывода даты, дня недели и года в окно ?
- Помогите с проблемой,Есть ли или существует метод-способ востоновить данные,файлы с карты памяти телефона.