0

私はこのコードを持っています

foreach (syncspec.Attribute attr in attributes)
{
      string fullPath = location + "\\" + attr.link;
      if (File.Exists(fullPath))
}

既知の場所を確認しています。フルパスの例を以下に示します

// fullPath = "C:\\Users\\matt\\Desktop\\shard\\all/file30005"

私がやりたいことは、すべてのフォルダーとすべてのフォルダー内のサブフォルダーを調べることです...これを達成する方法についてのアイデア

4

5 に答える 5

4
System.IO.Directory.GetFiles(location, attr.link, SearchOption.AllDirectories);

MSDN 経由で GetFiles の詳細を読む: http://msdn.microsoft.com/en-us/library/ms143316

于 2012-05-15T14:20:24.920 に答える
1

他の人が提案したように GetFiles(..) を使用するか、次のような再帰的な方法を使用できます(完全に機能するソリューションbtw):

bool FileExists(string path, string filename)
{
  string fullPath = Path.Combine(path, filename);
  return File.Exists(fullPath) && Directory.GetDirectories(path).All(x => FileExists(x, filename));
}
于 2012-05-15T14:25:34.013 に答える
1

あなたの友達は

DirectoryInfo.GetFiles("filename", SearchOption.AllDirectories);

この例のように:

DirectoryInfo info = new DirectoryInfo(location);
FileInfo[] results = info.GetFiles(attr.Link, SearchOption.AllDirectories);
foreach(FileInfo fi in results)
    ....

参照用にMSDN ドキュメントを参照してください

于 2012-05-15T14:22:47.383 に答える
1

まず、パスに単純な連結を使用せず、Path.Combineを使用します。

string parentDirPath = Path.Combine(location , attr.link);

次に、すべてのサブディレクトリを反復処理するために、次を使用できます

Directory.EnumerateDirectories

例:

foreach (var dir in  Directory.EnumerateDirectories(parentDirPath))
{
     //do something here
}
于 2012-05-15T14:28:41.470 に答える
0

このソリューションは少し重いですが、検索中に例外をキャッチして続行できるため、その変形を使用します。 GetFiles()トラバースする権限がないディレクトリに遭遇すると、完全にエラーになります。

これを確認してください:安全なファイルの列挙

于 2012-05-15T14:32:56.853 に答える