Тест C#, если у пользователя есть доступ для записи к папке

Я думаю , это отвечает на Ваш вопрос - в основном не, если класс не прибывает из специального загрузчика класса, и это разгружает класс.

178
задан Chris B 28 August 2012 в 09:03
поделиться

7 ответов

Это вполне допустимый способ проверить доступ к папке в C #. Единственное место, где он может упасть, - это если вам нужно вызвать это в замкнутом цикле, где накладные расходы на исключение могут быть проблемой.

Были и другие похожие вопросы. спрашивал ранее.

59
ответ дан 23 November 2019 в 20:16
поделиться

Я согласен с Эшем, это должно быть хорошо. В качестве альтернативы вы можете использовать декларативный CAS и фактически предотвратить запуск программы, если у них нет доступа.

Я считаю, что некоторые из функций CAS могут отсутствовать в C # 4.0 из того, что я слышал, а не уверен, может ли это быть проблемой.

0
ответ дан 23 November 2019 в 20:16
поделиться

Ваш код получает DirectorySecurity для данный каталог и правильно обрабатывает исключение (из-за того, что у вас нет доступа к информации безопасности). Однако в вашем примере вы фактически не опрашиваете возвращенный объект, чтобы узнать, какой доступ разрешен - и я думаю, вам нужно добавить это.

6
ответ дан 23 November 2019 в 20:16
поделиться

ИМХО, единственный 100% надежный способ проверить, можете ли вы писать в каталог, - это записать в него и в конечном итоге перехватить исключения.

11
ответ дан 23 November 2019 в 20:16
поделиться

У вас есть потенциальное состояние гонки в вашем коде - что произойдет, если у пользователя есть разрешения на запись в папку, когда вы проверяете, но до того, как пользователь фактически записывает в папку, это разрешение отозвано ? Запись вызовет исключение, которое вам нужно будет поймать и обработать. Так что первоначальная проверка бессмысленна. С таким же успехом вы можете просто писать и обрабатывать любые исключения. Это стандартный шаблон для вашей ситуации.

2
ответ дан 23 November 2019 в 20:16
поделиться

http://www.codeproject.com/KB/files/UserFileAccessRights.aspx

Very usefull Class, check for improved version in messages bellow.

2
ответ дан 23 November 2019 в 20:16
поделиться

Вы можете попробовать следующий блок кода, чтобы проверить, имеет ли каталог доступ на запись. Он проверяет FileSystemAccessRule.

string directoryPath = "C:\\XYZ"; //folderBrowserDialog.SelectedPath;
bool isWriteAccess = false;
try
{
    AuthorizationRuleCollection collection =
        Directory.GetAccessControl(directoryPath)
            .GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
    foreach (FileSystemAccessRule rule in collection)
    {
        if (rule.AccessControlType == AccessControlType.Allow)
        {
            isWriteAccess = true;
            break;
        }
    }
}
catch (UnauthorizedAccessException ex)
{
    isWriteAccess = false;
}
catch (Exception ex)
{
    isWriteAccess = false;
}
if (!isWriteAccess)
{
    //handle notifications 
}
3
ответ дан 23 November 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: