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

你的朋友是

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

您可以按照其他人的建议使用 GetFiles(..) 或使用这样的递归方法(顺便说一句,完全有效的解决方案):

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

首先不要在路径上使用简单的连接,而是使用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 回答