NOTE:已确定Windows较新的版本中,只在个别情况下生效。原因大约是:在Windows10的某个版本(大概是1607)之后,Windows的好几个path相关的API都出现了bug(未能记录下来对应的API名称,抱歉!),例如cmd用了几十年,用来生成短路径的API已经无法处理一些情况下的长路径(如安装多个版本Visual Studio时,无法处理小于140版本的长路径。具体可参考CygWin的cygpath.exe以及该工具的源代码中用到的win API),该bug已经持续了四五年,并影响到了Windows11。
   
  
  
   
    结论:对于较新版的Windows,本文的解决方案暂时处于失效状态,版本介于2016年至2019年间的Windows有可能依旧适用。该结论是基于对特定情况下无法生成短路径、无法处理长路径的现象及对第三方开源代码研究、归纳总结而得,不保证原因的正确性。
   
  
  
   Windows一直以来都有一个系统常量
   
    MAX_PATH = 260
   
   ,用于定义一个文件名(Filename)或者全路径(Directory route)的最大长度,在实际实践中,不管在命令行或者是使用编程语言调用相关系统API处理长路径文件时都会受到此常量的限制,即最大长度不得超过260个字符(characters),这是为了限制某些进程访问过长的路径而对系统产生的潜在风险和影响。
  
  
   在2016年的Windows10 Insider Preview版本(现已支持Windows10,Windows Server 2016及以上版本系统)中,微软为Windows用户增加了一项策略
   
    Enable NTFS long paths
   
   ,允许用户在激活该策略时可以突破260个字符的文件路径长度限制。早期版本中只针对NTFS格式的硬盘支持该项策略。
  
  
   - 
    打开策略管理器:按下win徽标键+R,输入
    
     gpedit.msc
    并回车,或者直接通过开始菜单打开
     gpedit
    ;
- 
    定位到
    
     Local Computer Policy
    >
     Computer Configuration
    >
     Administrative Templates
    >
     System
    >
     Filesystem
    ;
- 
    在当前位置寻找策略
    
     Enable NTFS long paths
    ,在较老的系统版本中,该项策略会在
     Filesystem
    下的
     NTFS
    策略组中;
- 
    双击
    
     Enable NTFS long paths
    策略,将状态改为
     Enabled
    并保存即可。
  相关背景Windows一直以来都有一个系统常量MAX_PATH = 260,用于定义一个文件名(Filename)或者全路径(Directory route)的最大长度,在实际实践中,不管在命令行或者是使用编程语言调用相关系统API处理长路径文件时都会受到此常量的限制,即最大长度不得超过260个字符(characters),这是为了限制某些进程访问过长的路径而对系统产生的潜在风险和影响。在2016年的Windows10 Insider Preview版本(现已支持Windows10,Windows Se
  
   有不少用户在复制粘贴文件夹的时候遇到提示“目标文件夹的
   
    文件名
   
   太
   
    长
   
   ”,或者在打开文件夹的时候提示“
   
    文件名
   
   或扩展名太
   
    长
   
   ”导致无法打开文件。这该怎么办?针对这个问题,小编下面就给大家分享一下解决的办法。
更多重装系统教程尽在小白系统重装官网
  修复 1:保持
   
    文件名
   
   简短
  通常,发生这种情况是因为用户选择的
   
    文件名
   
   比
   
    Windows
   
   
    策略
   
   中为
   
    文件名
   
   字符数设置的特定
   
    限制
   
   太
   
    长
   
   。
  因此,如果用户尝试通过选择文件并按F2键来重命名文件并尝试保持简短而优美以便更好地理解,然后按 Enter键,那将是很好的。
#define NAME_
   
    MAX
   
   255	/* # chars in a file name */
#define
   
    PATH
   
   _
   
    MAX
   
   4096	/* # chars in a
   
    path
   
   name including nul */
......
   
    tiandyoin:
   
   
   
    取消Windows的长文件名限制(通过策略管理器永久取消)
   
   
    tiandyoin:
   
   
   
    C++读取文本文件到char*
   
   
    万事儒意: