gpt4 book ai didi

c# - 获取 SubDir 作为字符串返回类型

转载 作者:行者123 更新时间:2023-11-30 19:44:43 26 4
gpt4 key购买 nike

我试图在指定文件夹的子目录中找到一个文件(我们称它为 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, 或/b)。如果文件位于 /aa 或/bb 或更深的位置(例如 root/a/aa/aaa,),则每次都返回 NULL。我花了好几个小时试图通过慢慢调试调试器并仔细观察本地窗口来解决这个问题,但我似乎无法弄清楚出了什么问题。它确实找到了文件并在第二个 foreach 循环中存储了正确的子目录路径,但是随后,出于某种原因,它开始向后循环(显示之前的目录,直到它到达 返回“空”;)。如果在第一级子目录中找到文件,则不会发生这种情况,只有在第二级或更深的目录中找到它时才会发生。

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#我通读了初学者指南书和互联网......我已经勇敢地搜索了这两本书,但对于这个特定问题都无济于事......所以,非常感谢任何帮助或指示!

最佳答案

为什么不使用内置的递归搜索?

有点像

Directory.GetFiles(@"C:\MyFolder\", "blah.txt", SearchOption.AllDirectories)

看看Directory.GetFiles Method (String, String, SearchOption)SearchOption Enumeration

甚至DirectoryInfo .

有点像

new DirectoryInfo(@"C:\MyFolder\").GetFiles("blah.txt", SearchOption.AllDirectories)

关于c# - 获取 SubDir 作为字符串返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11840739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com