2

像我之前的一些人一样,我对最大路径长度限制感到困惑。我使用 robocopy 和新的 Windows 10 机器成功地将文件树传输到 NAS。
在源计算机上,所有文件都在 260 个字符的限制内。使用 robocopy 将它们从路径 e: 复制到路径 \nas-3tb-backup\Public\Save_2019。之后我想用一个小的 C# 程序检查它,但我没有成功。FileInfo 和 File.OpenRead 都无法通过 NAS 名称找到具有扩展路径的文件。记事本、Visual Studio Code、Windows Explorer 等所有程序在显示或打开此文件时都没有问题。我尝试使用此处显示的前缀 \\?\:https ://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#maxpath但是 \\?\\\nas-3tb-backup---- 的尝试失败了。链接的文章中仍然有提示更改注册表时扩展路径。我想避免这种情况,因为那时我将不得不更改所有 Windows 计算机,并且由于 Windows 自己的程序可以在没有注册表黑客的情况下工作,所以对我来说应该是可能的。

string fn1 = @"\\?\\\nas-3tb-backup\Public\VeryLongPathToFile";
bool b1 = new FileInfo(fn1).Exists;
if (b1) {
    using (FileStream stream = File.OpenRead(fn1)) {
    var b = stream.ReadByte();
    }
}
4

2 回答 2

3

您是否按照此处所述更改了 C# 解决方案中的 app.config 文件.NET 4.6.2 and long paths on Windows 10

在这篇文章中,他在很长的路径上创建了一个文件夹,但也许它也会对您有所帮助。

他使用的代码:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>
于 2019-12-18T12:47:04.943 回答
2

解决方案

创建清单文件

app.manifest 文件必须包含

<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
  </windowsSettings>
</application>

无需更改配置文件或计算机策略(可能适用于 Win32 应用,但未经测试)

前缀 \\?\ 不适用于 UNC 路径 本地路径(如 c:\)必须写为本地 UNC 路径,例如 \\?\C:\

测试系统

视窗 10 版本。1909 .Net Framework 4.7 C# .Net 控制台应用程序 64 位

于 2019-12-20T01:46:20.673 回答