![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с текстовымми файлами [D5]
DeMoN-777 © (2002-04-09 00:43:00)Проблема вот в чём....
Мне надо считать данные с файла и записать их в другой.
Делаю следующее....
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
x, c : textfile;
z : string;
begin
assignfile(c, ExtractFilePath(Application.ExeName)+"cfg.txt");
assignfile(x, "c:\mustdie\wincmd.ini");
rewrite(c);
reset(x);
while not eof(x) do
begin
readln(x,z);
writeln(c,z);
end;
end;
Всё-бы хороошо только последние 7 строчек файла нивкакую не хочет
записывать. Я проверял на лэйбле, он всё считывает, а вот последние 7
строчек записывать не хочет =(.
В чём-же дело ???
Song (2002-04-09 14:03:00) [1]2Flx (09.04.02 13:31)
Для этого есть процедура Flush();
Flx (2002-04-09 13:31:00) [2]Не буду утверждать, но по-моему, у Дельфей для текстовых файлов есть свой 128-байтный буфер. Остатки в нем обычно и теряют. ОС то пишет, что ей передали, а получается что не все (см. размер обрезанного файла - он кратен 128-ми).
Anatoly Podgoretsky (2002-04-09 11:18:00) [3]DeMoN-777 © (09.04.02 01:16)
Нет закрытия файлов, но это уже сказали
По OnCloseQuery он закрываться не может, они у тебя локальные
Rooman © (09.04.02 08:42)
Не обязательно, но сообственно не важно, даже если закрываются то в каком соостоянии решит система.
Вместо приведенного мною кода, проще использовать функцию copyfile, но в Д1 ее нет
Rooman (2002-04-09 08:42:00) [4]Хоть там файлы - локальные переменные, файлы все равно закрываются самой ОС при закрытии приложения! Но это не суть, конечно, нужно их закрывать всегда по окончания использования.
DeMoN-777 (2002-04-09 01:28:00) [5]=)
Вася Пупкин (2002-04-09 01:27:00) [6]DeMoN-777 © (09.04.02 01:26)
Вася Пупкин © (09.04.02 01:26)
Синхронное плавание :))))))
DeMoN-777 (2002-04-09 01:26:00) [7]Вася ты был прав !
Вот этот код работает.
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
x,c : textfile;
z : string;
begin
assignfile(c, ExtractFilePath(Application.ExeName)+"cfg.cfg");
assignfile(x, "c:\mustdie\wincmd.txt");
rewrite(c);
reset(x);
while not EOF(x) do
begin
readln(x,z);
writeln(c,z);
end;
closefile(c);
closefile(x);
end;
Вопрос закрыт, всем спасибо
Вася Пупкин (2002-04-09 01:26:00) [8]>Файл закрывается по onclosequery.
По Вашему коду - не вижу, чтоб закрывался (у Вас x, c : textfile; - локальные ) :)
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
x, c : textfile;
z : string;
begin
assignfile(c, ExtractFilePath(Application.ExeName)+"cfg.txt");
assignfile(x, "c:\mustdie\wincmd.ini");
rewrite(c);
reset(x);
while not eof(x) do
begin
readln(x,z);
writeln(c,z);
Label1.Caption:=z;
end;
CloseFile(x);
CloseFile(c);end;
DeMoN-777 (2002-04-09 01:16:00) [9]Anatoly Podgoretsky
Спасибо большое всё фунциклирует.
Но в том-то коде какая ошибка ???
Файл закрывается по onclosequery.
Вася Пупкин (2002-04-09 01:14:00) [10]2Anatoly Podgoretsky © (09.04.02 01:13)Не... он просто CloseFile не сделал ;)
Anatoly Podgoretsky (2002-04-09 01:13:00) [11]У тебя наверно недопустимые символа в файле, попробуй так
Procedure FileCopy(Const src, dst: String );
Var
S,T: TFileStream;
Begin
S := TFileStream.Create(src, fmOpenRead );
try
T := TFileStream.Create(dst, fmCreate );
try
T.CopyFrom(S, S.Size ) ;
finally
T.Free;
end;
finally
S.Free;
end;
End;
Вася Пупкин (2002-04-09 01:12:00) [12]А файл закрывать Пушкин должен ?