我正在传递文件名,我需要验证它是否有效。
有效的文件名必须符合许多标准才能在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
)答案 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);
}