FileInfo 构造函数在短于 256 个字符时报告长文件名

FileInfo constructor reporting long filenames when they're shorter than 256 chars

正在向我传递一个文件名,我需要验证它是否有效。

有效文件名必须满足许多条件才能在 Windows 中被视为有效,其中之一是 its length cannot exceed 256 characters.

为了验证此 属性(以及许多其他),我正在利用 FileInfo 构造函数:

try
{
    var fi = new FileInfo(filename);
}
catch (Exception ex)
{
    //PathTooLongException among others
}

但是,即使文件名少于 256 个字符(例如 240 个字符),也会抛出 PathTooLongException。这是为什么?

注意:

如果传递给 FileInfo 构造函数的字符串是一个没有路径段的简单文件名(例如 filename.txt),那么它将以当前工作目录作为前缀。

所以如果你的应用程序是 运行 在 C:/Really/Long/I/Mean/Reaaaally/Long/Path 下,那么 filename.txt 将被转换为 C:/Really/Long/I/Mean/Reaaaally/Long/Path/filename.txt.

因此,即使 filename.txt 是一个完全有效的短文件名,它也可能在添加前缀后变得无效。

为避免这种情况,请改为使用 C:/ 作为前缀:

try
{
    var fi = new FileInfo("C:/" + filename);
}