Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с текстовымми файлами [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]

А файл закрывать Пушкин должен ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо