Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.08.18;
Скачать: [xml.tar.bz2];

Вниз

Как смоделировать ошибку для 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
15-1363598948
student_ai
2013-03-18 13:29
2013.08.18
Как смоделировать ошибку для CloseFile ?


2-1353997983
Mikishanya
2012-11-27 10:33
2013.08.18
Stringgrid удаление пустых строк


15-1363336410
@!!ex
2013-03-15 12:33
2013.08.18
Ищу программиста, для разовой работы


2-1355323960
Иван
2012-12-12 18:52
2013.08.18
Stringgrid запись без пустых строк


15-1363547215
Дмитрий С
2013-03-17 23:06
2013.08.18
У кого английский Photoshop CS6 (64)





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