Форум: "Прочее";
Текущий архив: 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