Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизI/O Error 32 при Rewrite Найти похожие ветки
← →
silversmith (2006-10-29 14:52) [0]Есть примерно следующая процедура
var
fv:textfile;
begin
AssignFile(fv,"1.txt");
Rewrite(fv);
....
CloseFile(fv);
end;
При повторном вызове вылетает с ошибкой I/O Error 32.
Ошибка вылетает даже в том случае если я при повторном вызове физически стираю файл 1.txt с диска.
Как побороть?
← →
Anatoly Podgoretsky © (2006-10-29 14:58) [1]> Ответ на сообщение [0]
Нельхя повторно открывать пока старый файл не закрыт.
← →
silversmith (2006-10-29 15:04) [2]Я что-то не пойму. То что я CloseFile(fv) вызвал в конце процедуры это Дельфи по барабану?
← →
Орион © (2006-10-29 15:06) [3]> [2] silversmith (29.10.06 15:04)
а у тебя случаем в процедуре нет подобногоif ... then Exit
? Короче говоря: ты уверен, что до CloseFile дело доходит?
← →
Anatoly Podgoretsky © (2006-10-29 15:06) [4]> Ответ на сообщение [2]
> То что я CloseFile(fv) вызвал в конце процедуры это Дельфи по барабану?
Этого не видать поскольку отсутствует блок защиты ресурсов, кроме того не
видать сколько раз ты это вызвал.
Дельфи по барабану, если дойдет дело до данной строчки то она ее выполнит.
← →
silversmith (2006-10-29 15:11) [5]>>if ... then Exit?
Такого нет. Вообще процедура практически линейна. Примерна такая:
var
fv:textfile;
begin
AssignFile(fv,"1.txt");
Rewrite(fv);
for i:=1 to n do begin
writeln(fv,...);
end;
CloseFile(fv);
end;
>>блок защиты ресурсов
???
>>кроме того не видать сколько раз ты это вызвал.
Процедура вызывается по нажатию на кнопку на главной форме. При втором нажатии вылетает I/O Error32.
>>Дельфи по барабану, если дойдет дело до данной строчки то она ее выполнит.
Пошагово прогоняю программу. Строка CloseFile(fv) выполняется.
← →
sniknik © (2006-10-29 15:25) [6]> Error 32
в переводе на русский -
Процесс не может получить доступ к файлу, так как этот файл занят другим процессом
> Примерна такая:
ну так она примерна правильно и выполняется...
сделал из примерной точную... и сколько не жму на кнопку, от повторов ошибок нет...procedure TForm1.Button1Click(Sender: TObject);
var
fv: textfile;
i: integer;
begin
AssignFile(fv, "1.txt");
Rewrite(fv);
for i:=1 to 10 do
writeln(fv, "kljkljkl");
CloseFile(fv);
end;
форматирование наверное помогло... ;о))
← →
Anatoly Podgoretsky © (2006-10-29 15:28) [7]> Ответ на сообщение [5]
> Процедура вызывается по нажатию на кнопку на главной форме.
> При втором нажатии вылетает I/O Error32.
Не нажимай пока файл гарантировано не будет закрыт
← →
silversmith (2006-10-29 15:38) [8]А как узнать что он гарантировано закрыт?
IOResult после выплонения CloseFile = 0. Никаких исключений при закрытии не возникает.
← →
silversmith (2006-10-29 16:21) [9]Мнэ.. ну а все таки. Если я повторно вызываю CloseFile возникает ошибка I/O Error 103 файл не открыт. Стало быть файл таки закрывается?
← →
silversmith (2006-10-29 16:34) [10]Изменил код следующим образом:
var
fv:textfile;
begin
AssignFile(fv,"1.txt");
Rewrite(fv);
CloseFile(fv);
AssignFile(fv,"1.txt");
Append(fv);
for i:=1 to n do begin
writeln(fv,...);
end;
CloseFile(fv);
end;
Вы будете смеятся, но так заработало. Если кто объяснит почему эот код работает при том, что не работал предыдущий буду премного благодарен.
Мерно постукивая в бубен удаляюсь отплясывать ритуальный танец вокруг компьютера.
← →
Anatoly Podgoretsky © (2006-10-29 17:12) [11]> Ответ на сообщение [8]
Не позволять повторно открыть и узнавать не надо будет.
Обеспечить защиту ресурсов, что бы при любых ситуациях файл закрывался.
Обрывок твоего кода не позволяет одназначно говорить, что и где делать,
неясно даже это функция/процедура или что то другое.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.057 c