1

私のネットワークには、アクセスが単にブロックされているファイルがいくつかあります。

ユーザーはファイルを開くことも読み取ることもできません。

ファイルを開こうとすると、「アクセスが拒否されました」というメッセージだけが表示されます。

 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 クエリのために例外は処理されません。解決策はありますか?>

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 に答える