Страница 1 из 1
Проверка возможности записи файла на диск
Добавлено: 21 дек 2006, 04:21
Vasia777
Может кто знает, никак не могу избежать этого: как только пытаюсь создать файл на защищённом диске, мне сразу вылетает сообщение, что типа не возможно создать файл, т.к. как диск защищен от записи (итп.), а мне нужно, чтоб при таком действии просто ничего не происходило, иными словами, чтоб ошибка не появлялась.
Конструкция
Try
Except end;
в данном случае не работает.
Или может кто-нибудь знает, как можно проверить наличие возможности записать файл?
Re: Проверка возможности записи файла на диск
Добавлено: 21 дек 2006, 08:41
somewhere
Конструкция Try Except используется для отлова исключений. Файловые ошибки не являются исключениями - это ошибки ввода/вывода. За состояние произведенной файловой операции отвечает функция IOResult которая выдает код ошибки файловой операции - если таковая была, либо 0 - если все прошло гладко. Однако компилятор по-умолчанию уже генерит код, который ее проверяет и выдает сообщение в случае ошибки. Следовательно, чтобы прога молчала в тряпочку в этом месте генерацию кода необходимо исключить, при необходимости проверять самому IOResult
Код: Выделить всё
AssignFile(F, 'abcdef.dat');
{$I-}
Reset(F, 1);
If IOResult <> 0 then
begin
...
...
end;
{$I+}
Re: Проверка возможности записи файла на диск
Добавлено: 21 дек 2006, 09:53
Vasia777
somewhere, большое спасибо!
Re: Проверка возможности записи файла на диск
Добавлено: 21 дек 2006, 18:45
Vasia777
В общем половина проблемы решена, а это уже хорошо... Только заместо Reset пришлось поставить ReWrite.. Чтоб создать файл, а не открывать существующий для чтения.
Таким способом можно проверить создался ли файл или нет, а вот избежать сообщения "диск защищен от записи" не удалось, т.к. при вызове функции ReWrite сразу же выдаётся ошибка ввода/вывода. Что делать не знаю...
Вот код, сообщение выдаётся уже после ошибки ввода/вывода. Кто знает, подскажите пожалуйста!!!!
var
f:file;
begin
AssignFile(F, 'h:\abcdef.dat');
{$I-}
Rewrite(F, 1);
If IOResult <> 0 then
begin
showmessage('Ошибка');
end;
{$I+}
Re: Проверка возможности записи файла на диск
Добавлено: 21 дек 2006, 20:32
Duncon
{$!-}
Rewrite(F, 1);
{$I+}
Re: Проверка возможности записи файла на диск
Добавлено: 21 дек 2006, 20:57
Колядин Максим
Здесь всё правильно и должно безотказно работать, - не знаю в чём ошибка. Сообщение итак должно выдаваться после ошибки ввода/вывода. (по-моему)
Re: Проверка возможности записи файла на диск
Добавлено: 22 дек 2006, 07:36
Vasia777
Я знаю, что должно. А как сделать так, чтоб когда возникла ошибка ввода вывода, пользователь не видел сообщения типа: "Диск защищён от записи (итп)"?? Или как проверить возможность создания файла на диске, чтоб не вылазили ни какие сообщения??
Re: Проверка возможности записи файла на диск
Добавлено: 22 дек 2006, 10:56
Duncon
вот пример без вылетания ошибки немного подправь будет тебе счастье
Код: Выделить всё
function IsDriveReady(DriveLetter: char): bool;
var
OldErrorMode: Word;
OldDirectory: string;
begin
OldErrorMode := SetErrorMode(SEM_NOOPENFILEERRORBOX);
GetDir(0, OldDirectory);
{$I-}
ChDir(DriveLetter + ':\');
{$I+}
if IoResult <> 0 then
Result := False
else
Result := True;
ChDir(OldDirectory);
SetErrorMode(OldErrorMode);
end;
затем используем её:
if not IsDriveReady('A') then
ShowMessage('Drive Not Ready')
else
ShowMessage('Drive is Ready');
Re: Проверка возможности записи файла на диск
Добавлено: 22 дек 2006, 10:58
Игорь Акопян
" писал(а): избежать сообщения "диск защищен от записи" не удалось
под отладчиком? или запустив EXE?