AutoLisp获取AppData路径及AppData.ini相关问题咨询
问题解答
1. 插件正确访问AppData目录的方法
手动拼接C:\Users\[用户名]\AppData的写法从根上就有兼容性问题:Windows域账号、微软账号登录时,用户文件夹名和登录用户名不一致是非常普遍的情况,再加上市面不少用户会把用户目录迁移到非C盘,硬编码拼接路径必然会出现定位失败。
直接用以下两种方案即可,覆盖所有DraftSight版本和Windows系统环境:
- 通用环境变量方案:直接读Windows系统内置的
APPDATA环境变量,返回值就是当前登录用户的Roaming目录绝对路径,完全不需要拼接用户名,不受用户目录位置、账号类型、系统语言影响。调用示例:
;; 获取DraftSight漫游配置根路径 (setq ds-roaming-path (strcat (getenv "APPDATA") "\\DraftSight\\"))
- DraftSight原生方案:直接读DraftSight内置系统变量
ROAMABLEROOTPREFIX,返回值就是当前用户的DraftSight配置目录绝对路径,连路径后缀都不用额外拼接,是适配性最好的写法。调用示例:
(setq ds-config-path (getvar "ROAMABLEROOTPREFIX"))
拿到路径后先通过vl-file-directory-p判断目录是否存在,不存在就用vl-mkdir递归创建目录,再做配置文件读写,避免IO报错。
2. AppData.ini的存放位置与可用性说明
- 调用
setcfg/getcfg返回nil是正常情况:这两个是AutoCAD早期版本的遗留接口,DraftSight只做了语法层面的兼容,根本没实现对应的配置读写逻辑,开发DraftSight插件不要依赖这两个函数。 - AppData.ini是AutoCAD 2002及更早版本用的配置存储文件,默认放在对应版本AutoCAD的安装根目录下,从AutoCAD 2004开始就已经改用注册表存配置,这个文件已经废弃20年以上,DraftSight从来没用过这个文件存配置,不需要找。
内容的提问来源于stack exchange,提问作者G Beck
相关产品推荐
相关产品推荐

