c# - 错误处理干扰了 C# 中的递归方法
问题描述
我正在创建目录中的文件列表。在创建该列表之前,我首先要进行错误检查以确保在控制台应用程序中输入的目录有效。我正在使用递归来创建一个循环,以便如果目录无效,它将通过验证方法运行。
从我的 Program.cs 类开始,我从 GetFileListFromDirectory 方法开始。然后该方法转到 IsValidDirectory 方法。如果我第一次输入一个好的目录路径一切正常。当我使用错误目录进行测试时,尽管我的输入正确地通过 IsValidDirectory 方法运行并给了我一个错误;所以我在控制台中输入了一个新目录,该方法循环回到 IsValidDirectory 的开头(就像它应该的那样)并验证新目录是否正确,但是当它返回时,它会跳回带有原始目录的 Catch 行 IsValidDirectory坏目录。完成此操作后,它返回到 GetFileListFromDirectory 并停留在 while 循环中,因为 isValid 在此时实际上应该为 true 时仍然为 false。
谢谢您的帮助!
/* Creates a list of all of the files in the chosen directory for mass audit potential */
public List<string> GetFileListFromDirectory(string inputDirectory)
{
bool isValid = false; //makes sure the directory is validated before continuing the method
while (!isValid)
{
isValid = IsValidDirectory(inputDirectory);
}
DirectoryInfo directory = new DirectoryInfo(inputDirectory);
FileInfo[] folder = directory.GetFiles("*");
List<string> files = new List<string>();
if (isValid)
{
foreach (var file in folder)
{
files.Add(file.Name.ToString().Replace(".csv", "").Replace(".txt", ""));
}
return files;
}
return null; //code path does not allow this return
}
/* Method keeps looping back to GetFileListFromDirectory if the directory results in error */
public bool IsValidDirectory(string inputDirectory)
{
bool validDirectory;
try
{
DirectoryInfo directory = new DirectoryInfo($@"{inputDirectory}");
FileInfo[] folder = directory.GetFiles("*");
validDirectory = true;
}
catch(Exception e)
{
Console.WriteLine($"\n{e}\n\nCheck the directory path and enter it again: ");
IsValidDirectory(Console.ReadLine());
validDirectory = false;
}
return validDirectory;
}
解决方案
IsValidDirectory
您需要将调用移至调用方法,而不是递归调用。尝试将while
块更改为:
while (true)
{
if (IsValidDirectory(inputDirectory))
{
break;
}
Console.WriteLine($"\n\nCheck the directory path and enter it again: ");
inputDirectory = Console.ReadLine();
}
并删除块的前两行catch
,只留下:
catch (Exception e)
{
validDirectory = false;
}
推荐阅读
- reactjs - 基于变体将嵌入式样式应用于 MUI 组件
- python - Gurobi - 解决容量定位问题
- dart - 如何使用 puppeteer 访问导航栏中的下拉菜单?
- reactjs - React js 嵌套组件/SearchBar 组件在 Header 中
- amazon-web-services - AWS javascript sdk 队列预置 ResourceNotFound 异常
- r - 创建一个函数来获取 europmc 文献以跳过不返回表格的纸张
- react-native - React Navigation:如何在 Stack Navigator 中伪造历史记录?
- sql-server - SQL Server - 如何将来源与正确的目的地/日期联系起来?
- azure - Azure 中的 ace::/64 地址空间是什么意思?
- reactjs - 将 Button 和 IconButton 组件放在同一行