我正在尝试找到Windows字符限制的解决方法,如果文件名称> = 260个字符,则不允许复制文件。根据{{3}},如果文件名前加\\?\
,则会绕过文件名长度限制。
我试过这个测试:
string source = "\\\\?\\C:\\Users\\xxxx\\Documents\\Visual Studio 2013\\Projects\\PDFConverterTester\\PDFConverterTester_BatchGUI\\bin\\Debug\\folder1\\a.txt";
string dest= "\\\\?\\C:\\Users\\xxxx\\Documents\\Visual Studio 2013\\Projects\\PDFConverterTester\\PDFConverterTester_BatchGUI\\bin\\Debug\\folder2\\a.txt";
System.IO.File.Copy(source, dest);
但这引起了例外:
Illegal characters in path.
我应该以不同的方式应用此前缀吗?
编辑:我公司的IT政策不允许我在没有冗长审核过程的情况下安装任何新软件,这意味着我无法更新到4.6.2。所以我试图弄清楚如何使用我现有的Visual Studio .NET 4.5安装中的Windows API调用来解决这个问题。
答案 0 :(得分:2)
要启用长路径支持,您需要定位.Net Framework 4.6.2(或更新版本),或者您需要告诉您的应用它可以支持长文件名。为此,请将其添加到app.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>
可以进一步阅读here。