Проверка возможности записи файла на диск
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Может кто знает, никак не могу избежать этого: как только пытаюсь создать файл на защищённом диске, мне сразу вылетает сообщение, что типа не возможно создать файл, т.к. как диск защищен от записи (итп.), а мне нужно, чтоб при таком действии просто ничего не происходило, иными словами, чтоб ошибка не появлялась.
Конструкция
Try
Except end;
в данном случае не работает.
Или может кто-нибудь знает, как можно проверить наличие возможности записать файл?
Конструкция
Try
Except end;
в данном случае не работает.
Или может кто-нибудь знает, как можно проверить наличие возможности записать файл?
Конструкция Try Except используется для отлова исключений. Файловые ошибки не являются исключениями - это ошибки ввода/вывода. За состояние произведенной файловой операции отвечает функция IOResult которая выдает код ошибки файловой операции - если таковая была, либо 0 - если все прошло гладко. Однако компилятор по-умолчанию уже генерит код, который ее проверяет и выдает сообщение в случае ошибки. Следовательно, чтобы прога молчала в тряпочку в этом месте генерацию кода необходимо исключить, при необходимости проверять самому IOResult
Код: Выделить всё
AssignFile(F, 'abcdef.dat');
{$I-}
Reset(F, 1);
If IOResult <> 0 then
begin
...
...
end;
{$I+}
somewhere, большое спасибо!
В общем половина проблемы решена, а это уже хорошо... Только заместо Reset пришлось поставить ReWrite.. Чтоб создать файл, а не открывать существующий для чтения.
Таким способом можно проверить создался ли файл или нет, а вот избежать сообщения "диск защищен от записи" не удалось, т.к. при вызове функции ReWrite сразу же выдаётся ошибка ввода/вывода. Что делать не знаю...
Вот код, сообщение выдаётся уже после ошибки ввода/вывода. Кто знает, подскажите пожалуйста!!!!
var
f:file;
begin
AssignFile(F, 'h:\abcdef.dat');
{$I-}
Rewrite(F, 1);
If IOResult <> 0 then
begin
showmessage('Ошибка');
end;
{$I+}
Таким способом можно проверить создался ли файл или нет, а вот избежать сообщения "диск защищен от записи" не удалось, т.к. при вызове функции ReWrite сразу же выдаётся ошибка ввода/вывода. Что делать не знаю...
Вот код, сообщение выдаётся уже после ошибки ввода/вывода. Кто знает, подскажите пожалуйста!!!!
var
f:file;
begin
AssignFile(F, 'h:\abcdef.dat');
{$I-}
Rewrite(F, 1);
If IOResult <> 0 then
begin
showmessage('Ошибка');
end;
{$I+}
{$!-}
Rewrite(F, 1);
{$I+}
Rewrite(F, 1);
{$I+}
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
Здесь всё правильно и должно безотказно работать, - не знаю в чём ошибка. Сообщение итак должно выдаваться после ошибки ввода/вывода. (по-моему)
Я знаю, что должно. А как сделать так, чтоб когда возникла ошибка ввода вывода, пользователь не видел сообщения типа: "Диск защищён от записи (итп)"?? Или как проверить возможность создания файла на диске, чтоб не вылазили ни какие сообщения??
Back to back!!!
вот пример без вылетания ошибки немного подправь будет тебе счастье
Код: Выделить всё
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');
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
под отладчиком? или запустив EXE?" писал(а): избежать сообщения "диск защищен от записи" не удалось
