Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.055 c
15-1161594503
Makhanev Alexander
2006-10-23 13:08
2006.11.12
Баг с потерей фокуса в винде...


1-1159734305
RWolf
2006-10-02 00:25
2006.11.12
Программа выпадает в режим отладки


2-1162129071
AlexanderMS
2006-10-29 16:37
2006.11.12
Hint к строке состояния (StatusBar).


15-1161531490
Pazitron_Brain
2006-10-22 19:38
2006.11.12
Как определить пинг до себя?


3-1157979564
kaif
2006-09-11 16:59
2006.11.12
Как ограничить запрашиваемый SQL-набор в ADO





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский