当我通过提供路径保存文件或使用system.io创建目录时,它会给出错误“指定的路径,文件名或两者都太长。完全限定的域名必须为260个字符,目录名称必须为240个字符“
1)。我尝试过Delimon库,但它仍然会出现同样的错误。
2)。我试图添加\?\前缀但它会导致非法字符。
3)。我也尝试过://在文件名的开头,但它导致uri不支持错误
现在我的问题是:
1)。是否可以使用System.IO库来使用长路径?
2)。如果您正在通过Delimon库提供解决方案,那么请告诉我可以在共享软件软件中使用此库吗?
提前致谢...
答案 0 :(得分:0)
基本问题是.NET框架特别不允许使用长文件名,并且会积极地阻止您使用它们。如果没有直接使用Win32 API调用来创建和写入您将无法使用长路径的文件。
根据路径的性质,您可以将其缩短到更短的长度。任何不适合8.3格式的文件或文件夹名称都有缩短版本。您可以使用GetShortPathName
API来确定是否存在符合标准限制的简短形式的路径。
示例:
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetShortPathNameW", SetLastError = true)]
static extern int GetShortPathName(string pathName, System.Text.StringBuilder shortName, int cbShortName);
static void Main()
{
StringBuilder sb = new StringBuilder(300);
int res = GetShortPathName(
@"C:\Program Files (x86)\GitHub Extension for Visual Studio\GitHub.VisualStudio.vsix",
sb,
300
);
Console.WriteLine(sb.ToString());
}
以上版画:
C:\PROGRA~2\GITHUB~1\GITHUB~1.VSI
这仅适用于存在但可用于至少将文件夹名称缩短到最短级别的文件。对于可能足以让您直接访问文件的临界情况。
如果没有,那么您需要查看某种解决方法。
最简单的方法可能是使用简短的简单路径进行初始保存,然后直接调用Win32 API将文件移动到最终位置,并提供完整的长路径支持。
您也可以尝试NuGet中的Pri.LongPath
模块。它允许您使用长文件名,包括移动等等,但我不认为它使您可以在超过260个字符限制时读/写这些文件。试试吧,看看。