【发布时间】:2012-08-04 03:49:37
【问题描述】:
我正在尝试在指定文件夹(我们称之为 MyFolder)的子目录中找到一个文件,并将该子目录保存到一个字符串变量中以便在其他地方使用。问题是,该指定文件夹中可能有多个子目录,并且每个子目录都可能包含它们自己的子目录。 MyFolder 下的树中只有一个所述子目录具有我要查找的文件。
在下面的示例中,它可能位于(可能更多,但在本例中)两个位置中的任何一个,但永远不要同时位于这两个位置。
-Root
--/MyFolder
---/a
-----/aa
-------------/blah.txt (or if not here, it may be...)
---/b
-------/blah.txt (...right here, possibly)
当然,我正在尝试定位 blah.txt。
我已经创建了一个递归foreach 循环,如下所示,但只有在子目录(/a, or /b) 的第一级中找到文件时,它才会返回子目录。如果文件位于/aa or /bb 或更深(例如root/a/aa/aaa,),则每次都返回NULL。我花了好几个小时试图通过慢慢地通过调试器并仔细观察本地窗口来解决这个问题,但我似乎无法弄清楚出了什么问题。在第二个foreach 循环中,它确实找到了文件并存储了正确的子目录路径,但是由于某种原因,它开始向后循环(显示以前的目录,直到它到达return "Null";)。如果在第一级子目录中找到文件,则不会发生这种情况,只有在第二级或更深的子目录中找到它时才会发生。
class Program
{
static string dir = @"C:\MyFolder\";
static void Main(string[] args)
{
Console.WriteLine(GetDirectory(dir));
Console.ReadKey();
}
static string GetDirectory(string dir)
{
foreach (string dName in Directory.GetDirectories(dir))
{
foreach (string fName in Directory.GetFiles(dName, "blah.txt"))
{
return dName;
}
GetDirectory(dName);
}
return "NULL";
}
}
我看到类似这样的工作的唯一方法是,如果您不尝试将路径保存为能够在其他地方使用的字符串(甚至可能被其他函数使用),而是让它立即显示为 void返回类型,例如在控制台中(通过将返回更改为"Console.WriteLine(dName)" 并适当地修改函数调用)。
我对 C# 很陌生,我之前唯一的编码经验是 JavaScript 和 AutoHotkey,所以我对此类语言的了解仍然非常有限,我所拥有的只是一本 C# 初学者指南我'已经通读了互联网......我已经勇敢地搜索了这两个具体问题,但无济于事......因此,非常感谢任何帮助或指针!
【问题讨论】: