在“拒绝访问”的情况下确定文件的FileAttribute:

时间:2012-08-29 13:22:05

标签: c# wpf visual-studio-2010 file access-denied

在我的网络中,有些文件的访问权限被阻止了。

用户无法打开或读取文件。

当我尝试打开文件时,我收到的唯一消息是“拒绝访问”。

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

我尝试了FileAttributes类下的其他可用选项。 “拒绝访问”没有任何内容匹配。

简而言之,我如何知道c#中是否拒绝访问文件。我正在使用WPF和visual studio .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 个答案:

答案 0 :(得分:1)

不使用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
        }

    }
}

答案 1 :(得分:0)

您不必检查FileAttributes,您需要检查安全列表。

您可以查看示例here,了解如何使用FileSecurity类。