ub3*_*t4r 4 c# filesystems validation try-catch
我正在编写一个 C# 程序,它使用System.IO方法来处理文件和目录。其中一些方法包括Directory.GetDirectories、Directory.GetFiles、 和 ,如果路径太长,Path.GetDirectoryName它们都可能抛出异常。PathTooLongException我的第一个问题是 Microsoft .NET Framework 是否会像在 C++ 中调用 Windows API 一样强制执行路径的最大长度?C# 中的路径(在 a 中string)超出范围是否MAX_PATH会导致PathTooLongException抛出?
我应该用这个吗?
string getFolderName(string path)
{
if (string.IsNullOrWhiteSpace(path))
return string.Empty;
if (path.Length > 260)
{
System.Diagnostics.Debug.WriteLine("Path is too long.");
return string.Empty;
}
string folderName = System.IO.Path.GetDirectoryName(path);
return folderName;
}
Run Code Online (Sandbox Code Playgroud)
或这个?
string getFolderName(string path)
{
if (string.IsNullOrWhiteSpace(path))
return string.Empty;
string folderName = string.Empty;
try {
folderName = System.IO.Path.GetDirectoryName(path);
}
catch (System.IO.PathTooLongException)
{
System.Diagnostics.Debug.WriteLine("Path is too long.");
}
return folderName;
}
Run Code Online (Sandbox Code Playgroud)
更好的是做出判断。
捕获异常比测试条件并完全避免异常要慢得多。但是,除非您将遇到大量异常,否则性能差异并不重要。
也很难想象您会遇到大量路径太长错误的情况,除非您尝试执行将树复制或移动到已经很深的目录节点中的操作。在这种情况下,您可能最好预先测试所有内容,这样您就不会创建一个会在中间失败的大型缓慢操作。
然而,正如前面的答案所示,硬编码 260 无论如何都是一个坏主意。
没有内置的 Windows 函数可以给出给定系统的真实答案,但您可以在开始操作之前通过用户系统上的反复试验(可能是二分搜索)来简单地确定答案。
但是,如果您阅读我引用的文章,您会发现您可以轻松地在程序中创建比 Windows 中更长的路径。一旦达到 255 个字符,Windows 资源管理器就会出现问题,长话短说,如果您有任何选择,我建议最多限制 255 个字符。
| 归档时间: |
|
| 查看次数: |
8695 次 |
| 最近记录: |