Определение атрибута 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
учебный класс.