getshortpatnname没有效果的解决方式
getshortpatnname
getshortpatnname是用于获取windows的一个path路径处理函数,与其说他是一个处理函数,还不如说他是一个读取函数。
在c++中import fileapi
在python中使用 win32api
前段时间这个模块出了问题,主要是genesis外挂脚本路径带有空格,报错命名错误,因为genesis是使用dos8.3命名方式,也就是短命名,这个可以去百度了解一下,回答正题,本来genesis软件自动换换成为短命名路径,但是不知道什么原因,没有转换成功,所以报错
解决
首先考虑的办法自己实现,通过两种方式,一种是python实现,某些机子出现非系统盘不能进行转换,更换为c++实现,还是同样的问题:
- python转换 pass;
- c++转换,同样的问题;
百度了很多方法,均没有效果,后来还是去了微软官方看看有没有相关的说明是打算写一个算法,但是官方没有公布十六进制转换的算法,但是有提到可以关闭某个磁盘的转换开关(8dto3),大概意思是用户可以根据自己的设置,打开或者关闭磁盘是否支持创建短命名文件,所以大概率猜到了问题可能出现在这儿
再次解决
-
fsutil 8dot3name query c查看相关的状态
-
fsutil 8dot3name set C: 1 1代表关闭,0代表打开。
-
注册表中也可以打开
SYSTEM\CurrentControlSet\Control\FileSystem
具体数值含义可以去查询一下
12两个需要管理员权限进行操作
但是当我开启了之后去获取之前的测试路径,还是没有办法获取到短路径的结果,后来思索之后发现,打开开关还不行,需要重新创建文件,getshortpatnname获取的结果并不是按照算法临时去计算,而是想官网所说的那样,当你打开8dot3功能,系统将会在创建新的文件的同时去创建一个短命名文件,所以以前的文件还是不能获取,因为并没有再创建文件的同时去创建短命名文件,所以新的文件才回去创建
测试
删除之前得测试文件,重新创建,测试没有问题
ps:很多输入发的错别字,就不改了,不影响阅读,转载请注明出处