Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизКак определить есть ли у программы доступ в каталог ? Найти похожие ветки
← →
dreamse (2005-11-04 10:47) [0]Т.е вопрос про разграничение доступа к каталогам, мне нужно определить имеет ли программа полный доступ к определёному каталогу. Хотелось бы решить эту проблему не дибильным Try Except
Есть ли решение ?
← →
Чапаев © (2005-11-04 10:49) [1]
> Хотелось бы решить эту проблему не дибильным Try Except
А чем не нравится этот способ?
← →
dreamse (2005-11-04 10:53) [2]> Чапаев © (04.11.05 10:49) [1]
1) Тем что в программе несколько тыс строк и каждый блок помещать в Try Except выглядит несколько не разумным
2) Это чисто идиотское решение , так как намного правельней будет где то в одном месте это определить при запуске чем пытаться проверять это постоянно , так как каталогов может быть много и на один доступ есть а на другие доступа нет и т.д
Т.е в начале запустить функцию проверки и всё , типа :
if not folderacess(Path+"data") then showmessage("error aces : data");
if not folderacess(Path+"Help") then showmessage("error aces : Help");
и т.д
← →
umbra © (2005-11-04 11:01) [3]апи я не знаю, но существует утилита cacls, которая выдает список существующих прав доступа к файлу/папке или строку "Access is denied"
← →
dreamse (2005-11-04 11:04) [4]Интересует определение доступа с помощью Delphi без всяких стороних утилит
← →
Плохиш © (2005-11-04 11:10) [5]www.msdn.com знает всё про внутренне и не только устройство вындовс.
PS. И русский бы подучить не мешало.
← →
umbra © (2005-11-04 11:15) [6]dreamse (04.11.05 11:04) [4]
Ну, она не совсем сторонняя, входит в комплект винды. И с помощьюCreateProcess
в Делфи можно получить текст, который cacls выдает на стандартный вывод.
← →
Джо © (2005-11-04 11:21) [7]
> [2] dreamse (04.11.05 10:53)
> Т.е в начале запустить функцию проверки и всё , типа :
Ничего не всё. Вообще-то, В ЛЮБОМ случае нужно обрабатывать ошибки работы с файлами/каталогами. Предположим, что ты определил, что доступ к каталогу у тебя есть, но, как только ты попытался читать из него, создатель каталога сменил права доступа или выдернул сетевой шнур.
← →
dreamse (2005-11-04 11:32) [8]> Джо © (04.11.05 11:21) [7]
Нужно определить доступ в локальный каталог
← →
Джо © (2005-11-04 11:37) [9]
> [8] dreamse (04.11.05 11:32)
> Нужно определить доступ в локальный каталог
Я и написал что
> создатель каталога сменил права доступа
Кроме того, даже если есть права на просмотр содержимого каталога, то на файлы, находящиеся в нем, могут быть установлены совсем другие права для разных действий. Т.е, на каждый файл - разные права. Чем тогда поможет функция определения "доступности" каталога? Ничем. Все равно, как и обычно, придется обрабатывать ошибки работы с каждым файлом. И это есть правильно.
И, кроме неимения прав доступа может быть еще с десяток причин, по которым в доступе может быть отказано.
Если уж так хочется, то в качестве очень грубого и не слишком полезного приближения можно написать такую вот функцию:
function TryPath (APath: string; var ErrorCode: Cardinal): Boolean;
var
H: THandle;
begin
ErrorCode := 0;
H := CreateFile(PChar(APath),
GENERIC_READ,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
0);
if H <> INVALID_HANDLE_VALUE then
begin
Result := True;
CloseHandle(H);
end
else
begin
ErrorCode := GetLastError;
Result := False;
end
end;
(Писал не в редакторе, поэтому возможны ошибки).
Но, повторю еще раз: я не считаю такой подход верным. По крайней мере, в общем случае.
← →
Чапаев © (2005-11-04 12:57) [10]
> Тем что в программе несколько тыс строк и каждый блок помещать
> в Try Except выглядит несколько не разумным
А что, нельзя выделить все проверки в функцию?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c