0

私はネットを検索して検索しましたが、この問題の適切な解決策を見つけることができませんでした。

ここに私のコード:

protected bool isFileValid(FileSystemInfo ifo)
{
   if (!ifo.Exists || ifo.Name.StartsWith("$") || ifo.Name.Equals("System Volume Information"))
        return false;
   if(ifo is DirectoryInfo){
        try
        {
           ((DirectoryInfo)ifo).GetFileSystemInfos();
        }
        catch (Exception e) { LogUtil.Debug("Exception in isFileValid" + e.Message); return false; }
   }
   return true;
}

例外をキャッチする以外に、ディレクトリにアクセスできるかどうかを確認する方法はありますか?このアプローチの問題は、アクセスできないディレクトリが多数あると、処理が非常に遅くなることです。

「ディレクトリにアクセスする」とは、GetFileSystemInfos()例外なくの呼び出しです。私が説明した方法でアクセス可能かどうかを判断するisFileValidために、すべてのアプリケーションから呼び出されます。FileSystemInfo

これを解決する方法についてのアイデアを事前に感謝します。

4

1 に答える 1

0

DirectoryInfo.Existsプロパティ(ドキュメントリンク)を見てみることができます

指定されたファイルが存在するかどうかを判断しようとしているときにエラーが発生した場合、Existsプロパティはfalseを返します。これは、無効な文字または文字が多すぎるファイル名を渡す、ディスクの障害または欠落などの例外が発生する状況、または呼び出し元にファイルを読み取る権限がない場合に発生する可能性があります。

(追加された強調は私のものです)。

簡単な例を次に示します。

var di = (DirectoryInfo)ifo;
if(di.Exists)
{
    di.GetFileSystemInfos();
}

編集:環境変数が機能しているようです。FileSystemInfoこのメソッドが呼び出される前のどこかで、文字列に格納されたファイルパスからを作成すると思います。次のように拡張する必要があります。

string expandedFilePath = Environment.ExpandEnvironmentVariables(filePath);

から作成する前にFileSystemInfo

http://msdn.microsoft.com/en-us/library/system.environment.expandenvironmentvariables.aspx

于 2012-07-18T13:43:47.810 に答える