Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.044 c
2-1130435828
Yus
2005-10-27 21:57
2005.11.20
Классы


2-1131100180
JBL
2005-11-04 13:29
2005.11.20
Boolean to Variant


14-1130186619
LordOfRock
2005-10-25 00:43
2005.11.20
Меня флудят :(((


14-1130613413
Prohodil Mimo
2005-10-29 23:16
2005.11.20
Снова о Delphi 2005


4-1127128263
Новый Гость
2005-09-19 15:11
2005.11.20
Как узнать, запущен ли Excel и закрыть его в случ. необходимости?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский