如何检查文件是否在C#中的任何文件夹及其所有子文件夹中?

时间:2012-05-15 14:16:34

标签: c# file subdirectory

我有这段代码

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

我正在检查已知位置,下面列出了示例完整路径

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

我想要做的是查看all文件夹和all文件夹中的所有子文件夹...有关如何实现此目的的任何想法

5 个答案:

答案 0 :(得分:4)

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

通过MSDN阅读有关GetFiles的更多信息:http://msdn.microsoft.com/en-us/library/ms143316

答案 1 :(得分: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 docs以获取参考资料

答案 2 :(得分: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));
}

答案 3 :(得分:1)

首先不要在路径上使用简单连接,而是使用Path.Combine

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

第二,迭代所有子目录,可以使用

Directory.EnumerateDirectories

示例:

foreach (var dir in  Directory.EnumerateDirectories(parentDirPath))
{
     //do something here
}

答案 4 :(得分:0)

这个解决方案有点重,但我使用它的一个变体,因为它允许你在搜索和继续时捕获任何异常。如果遇到没有遍历权限的目录,GetFiles()将完全错误。

请检查:Safe File Enumeration