【发布时间】:2017-11-10 13:51:27
【问题描述】:
我有这个文件计数函数,它没有从我的父目录返回结果。它确实返回所有子目录的结果。在我的调试过程中,我看到父目录作为我的 Directory.GetDirectories(sDir) 传递,但是一旦它到达 Directory.GetFiles(d),它就已经更改为子目录。我正在用头撞墙。显然,它一定是我的 foreach 循环,但我没有看到它。
我传递的文件结构是:
C:\Users\xxxxx\Desktop\Temp 日志
但它有三个子目录:
C:\Users\xxxxx\Desktop\Temp Logs\sub1
C:\Users\xxxxx\Desktop\Temp Logs\sub2
C:\Users\xxxxx\Desktop\Temp Logs\sub3
有人看到我的错误吗?
private static string fileCount(string sDir, string sfileType)
{
int count = 0;
string extension;
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string file in Directory.GetFiles(d))
{
extension = Path.GetExtension(file);
if (extension.ToUpper().Equals(sfileType.ToUpper()))
{
TimeSpan fileAge = DateTime.Now - File.GetLastWriteTime(file);
if (fileAge.Days > int.Parse(ConfigurationManager.AppSettings["numberOfDays"]))
{
count++;
}
}
}
}
return count.ToString();
}
【问题讨论】:
-
Directory.GetDirectories 不只返回参数的子目录吗?
-
您期望的输出数字是多少,实际得到的是什么?
-
正如@Casey 指出的那样,Directory.GetDirectories 不会返回父目录msdn.microsoft.com/pt-br/library/c1sez4sc(v=vs.110).aspx 为 foreach 之外的父目录放置一个额外的 Directory.GetFiles
-
我建议进行重构,使外部“for each”内的所有代码都在一个单独的函数中。使该函数将目录作为参数,并返回计数。从那里,只需在“for each”循环之前传递父目录,然后在 for each 循环中传递每个子目录,并在执行过程中累积结果。
标签: c#