1

在我的网络中,有一些文件的访问被简单地阻止了。

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

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

 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 查询而处理异常。任何解决方案?>

4

2 回答 2

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
        }

    }
}
于 2012-08-29T13:39:01.787 回答
0

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

您可以查看此处的示例以了解如何使用FileSecurity该类。

于 2012-08-29T13:25:13.443 回答