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
。这是为什么?
注意:
- 文件本身不必存在
- 我得到的文件名将不包含任何路径段(例如
C:/filename.txt
或//filename.txt
)
如果传递给 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);
}
正在向我传递一个文件名,我需要验证它是否有效。
有效文件名必须满足许多条件才能在 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
)
如果传递给 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);
}