使用WIN API 编程时,有时要读写的文件路径太深(路径超过260个字符,注意不是260字节),打开文件失败,非常的难受,查阅网上给出的解决方案也还是有点迷迷瞪瞪 。经过高人指点,发现有两种方法来解决这个问题。即 《 修改代码 》 和 《修改系统配置》。那我们来看看怎么解决吧 ---------->
方法一:《修改代码》
修改代码是比较麻烦的一种方法,对我们已定的代码结构来说修改是非常麻烦的,不推荐用此种方法,做法在路径前加"\\\\?\\",使得函数识别超过260个字符的路径,具体代码如下:
没错,路径前面加个前缀就可以啦,相当于告诉系统:我是长路径哦,给我开下后门。
方法二:《修改系统配置》
推荐这种方法,这种方法是一劳永逸的方法,不需要修改代码(即不需要和方法一类似在路径前添加"\\\\?\\")。类似于你买了一台机器,附赠了《 安装方法 (修改系统设置) 》 + 《 使用时说明(添加应用程序清单)》,也就是只需要修改系统设置和添加应用程序清单就可以了。接下来就让我们看看具体做法吧:
修改系统设置:
第一步:win+R 输入powershell回车打开 PowerShell :

第二步:打开了Power Shell后执行这个命令: New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
>> -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
如图:
接下来回车就好啦。
添加应用程序清单:
第一步:VS2015 ->解决方案资源管理器->属性->配置属性->清单工具->输入和输出->附加清单文件->编辑:

添加一个应用程序清单文件:程序名称.manifest,我的程序名字是ConsoleApplication3

那接下来我们要在我的项目根目录(即vcxproj文件所在的目录)创建一个ConsoleApplication3.manifest文件,并把下面内容填入并保存:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
...
<asmv3:application>
<asmv3:windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
<ws2:longPathAware>true</ws2:longPathAware>
</asmv3:windowsSettings>
</asmv3:application>
...
</assembly>
如图:

接下来编译程序就可以啦,你会发现你的程序支持长路径了。
当使用WINAPI编程遇到超过260字符的长路径无法打开文件时,有两种解决方案。方法一是通过在路径前添加'\?'来告知系统处理长路径;方法二是修改系统配置,通过PowerShell设置LongPathsEnabled为1,并在项目中添加应用程序清单,设置longPathAware为true。这样可以永久解决长路径问题,无需修改代码。
2396

被折叠的 条评论
为什么被折叠?



