Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Как определить есть ли у программы доступ в каталог ?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.054 c
2-1130580856
alexsis
2005-10-29 14:14
2005.11.20
Что такое BLOB ?


4-1126246809
Shustia
2005-09-09 10:20
2005.11.20
Обнаружение завершение процесса в диспетчере задач


14-1130336450
Kerk
2005-10-26 18:20
2005.11.20
Мальчик по имени Google


3-1129040707
AlexLines
2005-10-11 18:25
2005.11.20
поиск и маркировка поисковых фраз


14-1130707552
NightLord
2005-10-31 00:25
2005.11.20
из D6 в D7