c# - 前置 "\\?\"不适用于处理长路径

标签 c# .net path filepath

我正在尝试寻找一种解决 Windows 字符限制的方法,该限制不允许复制名称大于等于 260 个字符的文件。根据this MSDN article , 如果在文件名前加上 \\?\ ,这将规避文件名长度限制。

我试过这个测试:

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 调用来解决这个问题。

最佳答案

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

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

可以进一步阅读here .

关于c# - 前置 "\\?\"不适用于处理长路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41337607/

相关文章:

c# - 新线程签名(静态与非静态方法)

c# - 如何将Azure 2.3项目升级到Azure 2.4?

.net - 向客户报告模型状态和应用程序错误的推荐方法是什么?

c# - 错误无法将类型'string'隐式转换为'int'-ForEach循环中的迭代器

java - 如何在java或groovy中编写相当于python的os.path.relpath()

vbscript - 通过路径而不是名称检索具有多个用户的进程的 PID

C# Worker 服务与 Windows 服务

c# - MS VC++ 运行时库错误运行托管 C# 应用程序

javascript - jQuery 用户界面 : Uncaught TypeError: Cannot read property 'nodeType' of undefined

brew cask install java后java的路径还是/usr/bin/java