getshortpatnname没有效果的解决方式

getshortpatnname

getshortpatnname是用于获取windows的一个path路径处理函数,与其说他是一个处理函数,还不如说他是一个读取函数。
在c++中import fileapi
在python中使用 win32api

前段时间这个模块出了问题,主要是genesis外挂脚本路径带有空格,报错命名错误,因为genesis是使用dos8.3命名方式,也就是短命名,这个可以去百度了解一下,回答正题,本来genesis软件自动换换成为短命名路径,但是不知道什么原因,没有转换成功,所以报错

解决

首先考虑的办法自己实现,通过两种方式,一种是python实现,某些机子出现非系统盘不能进行转换,更换为c++实现,还是同样的问题:

  1. python转换 pass;
  2. c++转换,同样的问题;

百度了很多方法,均没有效果,后来还是去了微软官方看看有没有相关的说明是打算写一个算法,但是官方没有公布十六进制转换的算法,但是有提到可以关闭某个磁盘的转换开关(8dto3),大概意思是用户可以根据自己的设置,打开或者关闭磁盘是否支持创建短命名文件,所以大概率猜到了问题可能出现在这儿

再次解决

  1. fsutil 8dot3name query c查看相关的状态

  2. fsutil 8dot3name set C: 1 1代表关闭,0代表打开。

  3. 注册表中也可以打开
    SYSTEM\CurrentControlSet\Control\FileSystem
    getshortpatnname没有效果的解决方式
    具体数值含义可以去查询一下

12两个需要管理员权限进行操作

但是当我开启了之后去获取之前的测试路径,还是没有办法获取到短路径的结果,后来思索之后发现,打开开关还不行,需要重新创建文件,getshortpatnname获取的结果并不是按照算法临时去计算,而是想官网所说的那样,当你打开8dot3功能,系统将会在创建新的文件的同时去创建一个短命名文件,所以以前的文件还是不能获取,因为并没有再创建文件的同时去创建短命名文件,所以新的文件才回去创建

测试

删除之前得测试文件,重新创建,测试没有问题

ps:很多输入发的错别字,就不改了,不影响阅读,转载请注明出处

相关文章: