Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1159521850
Msl
2006-09-29 13:24
2006.11.12
Обращение к переменным,объявленным в форме, из dll


15-1161732708
Германн
2006-10-25 03:31
2006.11.12
"Осеннее обострение"


15-1161196483
Kerk
2006-10-18 22:34
2006.11.12
Что делать, если ничто не мотивирует? (-)


2-1161676141
Mishenka
2006-10-24 11:49
2006.11.12
Модальное окно


3-1158129656
Дед Маздай
2006-09-13 10:40
2006.11.12
Чем бы заменить suspend?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский