前缀“\\?\”不适用于处理长路径

时间:2016-12-27 00:29:35

标签: c# .net path filepath

我正在尝试找到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调用来解决这个问题。

1 个答案:

答案 0 :(得分:2)

要启用长路径支持,您需要定位.Net Framework 4.6.2(或更新版本),或者您需要告诉您的应用它可以支持长文件名。为此,请将其添加到app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>

可以进一步阅读here