C#从DirectoryNotFoundException中获取目录名
本文关键字:获取 DirectoryNotFoundException | 更新日期: 2023-09-27 18:00:05
我制作了一个应用程序,用于搜索某些目录中的一些文件。当目录不存在时,它抛出DirectoryNotFoundException
。我捕捉到了这个异常,但它没有DirectoryName
属性或类似FileNotFoundException
(FileName)的属性。如何从异常属性中找到目录名称?
没有办法以本机方式实现这一点。
将此类添加到您的项目中:
public static class DirectoryNotFoundExceptionExtentions
{
public static string GetPath(this DirectoryNotFoundException dnfe)
{
System.Text.RegularExpressions.Regex pathMatcher = new System.Text.RegularExpressions.Regex(@"[^']+");
return pathMatcher.Matches(dnfe.Message)[1].Value;
}
}
捕获异常并使用如下类型扩展:
catch (DirectoryNotFoundException dnfe)
{
Console.WriteLine(dnfe.GetPath());
}
这看起来像是一个破解,但您可以从Message
属性中提取路径。对于我来说,我更愿意首先使用Directory.Exists
方法来检查目录是否存在。
catch (DirectoryNotFoundException e)
{
// Result will be: Could not find a part of the path "C:'incorrect'path".
Console.WriteLine(e.Message);
// Result will be: C:'incorrect'path
Console.WriteLine(e.Message
.Replace("Could not find a part of the path '"", "")
.Replace("'".", ""));
}
FileNotFoundException
有文件名,但DirectoryNotFoundException
没有目录名,这有点不一致,不是吗?
这里有一个解决方法:在抛出异常之前,使用exception的Data
属性关联错误的目录名。
在尝试查找目录中的文件之前,请将目录名保存在变量中。然后为在该目录中查找的代码开始一个try块。现在,如果该代码块抛出,您就有了可用的目录名。
例如:
// ... somewhere in some method that's about to search a directory.
var dirName = directories[i]; // or something -- how do you get it before you pass it to DirectoryInfo?
try
{
SearchDirectory(dirName); // or a block of code that does the work
}
catch(Exception e)
{
// at this point, you know dirName. You can log it, add it to a list of erroring
// directories, or whatever. You could throw here, or swallow the error after logging it, etc.
}
首先用Directory检查它是否存在。存在
如果你只想在IDE中消除这个bug,那么你可以尝试这样做:
在Visual Studio中,转到Debug -> Exceptions
,然后选中Common Language Runtime Exceptions
对应的Thrown
框。当异常发生时,这将带你直接进入异常,而不是等待被发现。
很抱歉翻到一篇旧帖子,但正如其他人所说,DirectoryNotFoundException没有将目录作为属性,而FileNotFoundException却有,这是非常愚蠢的。
我已经把它作为功能请求放进去了。NET:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4472498-directorynotfoundexception-should-expose-the-name-
从大多数Directory类方法抛出的DirectoryNotFoundException的Message成员的格式是"未找到目录'input'"。从该字符串中提取输入应该不难。
问你,如果你是用那个确切的参数调用方法的人,为什么你需要从异常中获取输入参数?