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

Вниз

Как смоделировать ошибку для CloseFile ?   Найти похожие ветки 

 
student_ai   (2013-03-18 13:29) [0]

Пишу програмку по работе с файлами.
Обрабатывая ошибки по работе с файлами никак не удается заставить засбоить CloseFile - все закрытия удачные.
Код такой.

 ...
 CloseFile(f);
 if IOResult <> 0
 then
// обработка ошибки закрытия файла

Но вопрос не по коду.
Какая гипотетическая ситуация может привести к ошибке в CloseFile ?
Чем это экспериментально проверить ?


 
брат Птибурдукова   (2013-03-18 13:36) [1]


> CloseFile(f);  if IOResult <> 0
Закопайте труп... Реальные пацаны работают с потоками.


 
RWolf ©   (2013-03-18 13:40) [2]


> Какая гипотетическая ситуация может привести к ошибке в
> CloseFile ?

закрытие уже закрытого файла.


 
icWasya ©   (2013-03-18 13:51) [3]

Читать MSDN про функцию CloseHandle. Все ошибки будут оттуда.


 
student_ai   (2013-03-18 14:07) [4]


> RWolf ©   (18.03.13 13:40) [2]

Спасибо, как то не подумал об этом :)
Кстати, отсутсвие Reset после AssignFile тоже приводит к аналогичной ошибке.


> icWasya ©   (18.03.13 13:51) [3]

Почитаю на досуге.


 
icWasya ©   (2013-03-18 15:11) [5]

>>отсутсвие Reset после AssignFile
А это - закрытие неоткрытого файла


 
student_ai   (2013-03-18 17:17) [6]


> icWasya ©   (18.03.13 15:11) [5]
> >>отсутсвие Reset после AssignFile
> А это - закрытие неоткрытого файла

Ну это по сути то же самое что и двойное закрытие.

Вопрос тут скорее немного в другой плоскости.
Если у себя в программе я еще смогу контролировать порядок связывание-чтение-закрытие - то может ли ошибка при закрытии файла позникнуть не по вине моей программы, а по какому-либо внешнему событию ?

Т.е. моделируем такую ситуацию:

   AssignFile(F, OpenDialog1.FileName); { File selected in dialog }
// Успешная операция
   Reset(F);
// Успешная операция
   Readln(F, S);                        { Read first line of file }
// Успешная операция
...
// А вот тут в файловой системе чтото происходит
...
   CloseFile(F);
// Неуспешная операция


 
megavoid ©   (2013-03-18 19:01) [7]

> может ли ошибка при закрытии файла позникнуть не по вине моей программы, а по какому-либо внешнему событию
Могут вынуть флешку или диск, не "отмонтировав"


 
palva ©   (2013-03-18 23:07) [8]

> Могут вынуть флешку или диск, не "отмонтировав"
Или место на дискете кончилось именно при закрытии, когда на носитель записывались полузаполненные буфера.


 
student_ai   (2013-03-19 15:30) [9]


> megavoid ©   (18.03.13 19:01) [7]
> Могут вынуть флешку или диск, не "отмонтировав"

Странно ...
Пробую делать так:

procedure TForm1.Button1Click(Sender: TObject);
var
 s: string;
begin
 AssignFile(f, "A:\AUTOEXEC.BAT");
 Reset(f);
 while not EoF(f) do begin
   ReadLn(f, s);
   Memo1.Lines.Append(s);
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 CloseFile(f);
 Memo1.Lines.Append("IOResult = " + IntToStr(IOResult()));
end;

1. Нажимаю на кнопку 1 -  получаю список команд в мемо.
2. Вытягиваю дискетку.
3. Нажимаю на кнопку 2. Получаю IOResult = 0. Т.е. ошибки нету :\


 
robt   (2013-03-19 18:18) [10]

не все устройства буферизируются, теже флешки сейчас тоже без буфера по умолчанию в настройках винды, хотя раньше (в хп точно) было наоборот


 
robt   (2013-03-19 18:19) [11]

ты файлик то посолидней насилуй а не на 100 байтиков



Страницы: 1 вся ветка

Текущий архив: 2013.08.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
3-1292341059
noob_one
2010-12-14 18:37
2013.08.18
Почему может не отрабатывать Filter в IBQuery?


15-1363026996
Дмитрий С
2013-03-11 22:36
2013.08.18
Откуда гибрид берет энергию?


2-1355252635
Pcrepair
2012-12-11 23:03
2013.08.18
Загрузка страниц в Потоке с idHTTP


3-1291885156
_guest_
2010-12-09 11:59
2013.08.18
Из отладчика перестал подключаться к FB


6-1268845954
Vigi
2010-03-17 20:12
2013.08.18
Как правильно реализовать ?