[英]Counter inside a recursive function
我需要計算在此遞歸函數中刪除的文件數。 由於它是遞歸的,因此我無法使用if
語句,並且C#不支持全局變量。 有其他選擇嗎?
static void DirSearch(string path)
{
try
{
foreach (string dirPath in Directory.GetDirectories(path))
{
foreach (string filePath in Directory.GetFiles(dirPath))
{
string filename = Path.GetFileName(filePath);
if (filename.Equals("desktop.txt"))
{
File.Delete(filePath);
//count++
}
Console.WriteLine(filePath); // print files
}
Console.WriteLine(dirPath); // print directories
DirSearch(dirPath);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
嘗試如下遞歸count
。 因此, DirSearch
返回已刪除文件的count
。
static int DirSearch(string path)
{
int count = 0;
try
{
foreach (string dirPath in Directory.GetDirectories(path))
{
foreach (string filePath in Directory.GetFiles(dirPath))
{
string filename = Path.GetFileName(filePath);
if (filename.Equals("desktop.txt"))
{
File.Delete(filePath);
count++;
}
Console.WriteLine(filePath); // print files
}
Console.WriteLine(dirPath); // print directories
count += DirSearch(dirPath);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
return count;
}
一種方法是傳遞一些東西以供計數。 我將使用ref
進行此操作,例如:
static void DirSearch(string path, ref int count)
{
try
{
foreach (string dirPath in Directory.GetDirectories(path))
{
foreach (string filePath in Directory.GetFiles(dirPath))
{
string filename = Path.GetFileName(filePath);
if (filename.Equals("desktop.txt"))
{
File.Delete(filePath);
count++
}
Console.WriteLine(filePath); // print files
}
Console.WriteLine(dirPath); // print directories
DirSearch(dirPath,ref count);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
然后調用它:
int count = 0;
DirSearch(@"C:\SomePath",ref count);
然后,您可以像在代碼中注釋掉一樣正常使用count
。
沒有ref變量(因此您無需傳遞正確初始化的內容):
static int DirSearch(string path)
{
try
{
int count = 0;
foreach (string dirPath in Directory.GetDirectories(path))
{
foreach (string filePath in Directory.GetFiles(dirPath))
{
string filename = Path.GetFileName(filePath);
if (filename.Equals("desktop.txt"))
{
File.Delete(filePath);
count++;
}
Console.WriteLine(filePath); // print files
}
Console.WriteLine(dirPath); // print directories
count += DirSearch(dirPath);
}
return count;
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
您是否也考慮過像此處介紹的非遞歸解決方案? https://stackoverflow.com/a/929418/2979680
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.