首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Windows会有260个字符的路径长度限制?

为什么Windows会有260个字符的路径长度限制?
EN

Stack Overflow用户
提问于 2009-12-10 19:18:17
回答 10查看 350K关注 0票数 429

我在不合时宜的时候遇到过这个问题几次:

  • 尝试使用深度路径处理开源Java项目
  • 在源代码控制中存储深度Fitnesse树
  • 尝试使用Bazaar导入源代码管理树时出错

为什么会有这个限制呢?

为什么它还没有被移除?

您如何应对路径限制?不,切换到Linux或Mac不是这个问题的有效答案;)

EN

回答 10

Stack Overflow用户

发布于 2009-12-10 19:52:51

这并不完全正确,因为NTFS文件系统支持最多32k个字符的路径。您可以使用win32接口并在路径前加上"\\?\“前缀,以使用超过260个字符。

来自.Net BCL team blog的长路径的详细说明。

一小段摘录突出了长路径的问题

另一个问题是暴露长路径支持可能导致的不一致行为。大多数与文件相关的Windows都可以使用带有\\?\前缀的长路径,但并非所有Windows都可以使用。例如,如果文件名大于MAX_PATH,则将模块映射到调用进程的地址的LoadLibrary将失败。因此,这意味着MoveFile将允许您将动态链接库移动到某个位置,使其路径超过260个字符,但是当您尝试加载动态链接库时,它将失败。在所有Windows中都有类似的示例;存在一些变通方法,但它们是基于具体情况的。

票数 161
EN

Stack Overflow用户

发布于 2015-06-30 23:47:36

问题是为什么的限制仍然存在。当然,现代的Windows可以增加MAX_PATH的侧边,以允许更长的路径。为何没有取消限制呢?

  • 不能删除它的原因是Windows承诺它永远不会更改。

考虑以下正确的代码:

WIN32_FIND_DATA findData;

FindFirstFile("C:\Contoso\*", ref findData);

Windows 向我的程序保证它将填充我的WIN32_FIND_DATA结构:

WIN32_FIND_DATA {
   DWORD    dwFileAttributes;
   FILETIME ftCreationTime;
   FILETIME ftLastAccessTime;
   FILETIME ftLastWriteTime;
   //...
   TCHAR    cFileName[MAX_PATH];
   //..
}

我的应用程序没有声明常量MAX_PATH的值,而是Windows API声明的。我的应用程序使用了这个定义值。

我的结构定义正确,总共只分配592字节。这意味着我只能接收少于260个字符的文件名。Windows 向承诺,如果我正确编写了应用程序,我的应用程序将来将继续工作。

如果Windows允许文件名超过260字符,那么我的现有应用程序(正确使用了正确的API )将会失败。

它仍然可以在64位的Windows10上运行,这就是向后兼容给你带来的好处。

Microsoft确实创建了一种使用完整32,768路径名的方法;但他们必须创建一个新的契约来实现这一点。首先,您应该使用Shell API来枚举文件(因为并非所有文件都存在于硬盘驱动器或网络共享中)。

但它们也不能破坏现有的用户应用程序。绝大多数应用程序不使用shell api 文件工作。每个人都会给FindFirstFile/FindNextFile打电话,然后就到此为止了。

票数 129
EN

Stack Overflow用户

发布于 2016-10-28 20:49:27

在Windows10中,您可以通过修改注册表项来remove the limitation

提示从Windows10版本1607开始,已从常见的Win32文件和目录函数中删除了MAX_PATH限制。但是,您必须选择接受新的行为。

注册表项允许您启用或禁用新的长路径行为。要启用长路径行为,请将注册表项设置为HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (类型:REG_DWORD)。在第一次调用受影响的Win32文件或目录函数(列表如下)之后,系统(每个进程)将缓存该键的值。在进程的生存期内不会重新加载注册表项。为了让系统上的所有应用程序识别密钥的值,可能需要重新启动,因为某些进程可能已在设置密钥之前启动。注册表项也可以通过Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths上的组策略进行控制。您还可以通过清单为每个应用程序启用新的长路径行为:

true

票数 65
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1880321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档