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

时间:2015-08-07 11:11:08

标签: c# .net file filesystems

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

有效的文件名必须符合许多标准才能在Windows中被视为有效,其中一个是its length cannot exceed 256 characters

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

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

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

请注意:

  • 文件本身不一定存在
  • 我给出的文件名将包含任何路径段(例如C:/filename.txt//filename.txt

1 个答案:

答案 0 :(得分:3)

如果传递给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);
}