Определение атрибута FileAttribute для файла в случае "Отказано в доступе":

В моей сети есть несколько файлов, доступ к которым просто заблокирован.

Пользователь не может открыть или прочитать файл.

Когда я пытаюсь открыть файл, я получаю только сообщение "Отказано в доступе".

 bool isReadOnly = ((File.GetAttributes(Path) & FileAttributes.ReadOnly) ==   FileAttributes.ReadOnly);

Я пробовал другие варианты, доступные в классе FileAttributes. Ничто не соответствует "Отказано в доступе".

Короче говоря, как мне узнать, отказано ли мне в доступе к файлу или нет в C#. Я использую WPF и визуальную студию.net 2010

Всякий раз, когда я пытаюсь получить к нему доступ через код, я просто получаю исключение. Когда я пытаюсь открыть его вручную, я получаю что-то вроде "Отказано в доступе".

try
{
 IEs = from file in Directory.EnumerateFiles(sDirectoryToBeSearched, sValidExtensions, SearchOption.AllDirectories)
                      from str in File.ReadLines(file)
                      where (str.IndexOf(sSearchItem, StringComparison.OrdinalIgnoreCase) >= 0)
                      select file;
}

  catch
 {
      MessageBox ("Exception arised");
 }

Даже если используется try catch, исключение не обрабатывается из-за запроса LINQ. Любые решения?>

2 ответа

Решение

Вместо использования LINQ попробуйте использовать рекурсию, в этом случае, если доступ к файлу или папке будет запрещен, остальная часть процедуры будет продолжена. Пример ниже.

private void SearchDirectory(string folder)
{
    foreach (string file in Directory.GetFiles(folder))
    {
        try 
        {
            // do work;
        }
        catch 
        {
            // access to the file has been denied
        }
    }
    foreach (string subDir in Directory.GetDirectories(folder))
    {
        try 
        {   
             SearchDirectory(subDir);
        }
        catch 
        {
            // access to the folder has been denied
        }

    }
}

Вам не нужно проверять FileAttributesнеобходимо проверить списки безопасности.

Вы можете посмотреть пример здесь, чтобы увидеть, как работать с FileSecurity учебный класс.

Другие вопросы по тегам