永发信息网

关于GetOpenFileName和GetSaveFileName的问题

答案:6  悬赏:60  手机版
解决时间 2021-02-15 20:54
使用这两个函数后,选择文件过程中,如果当前目录改变了,那程序运行的当前路经也会实时改变,使用GetCurrentDirectory和SetCurrentDirectory只是事前备份事后还原罢了,对于选择文件过程中是没有作用的,同理设置OFN_NOCHANGEDIR也一样效果。
大侠们有没有办法使得当前运行路经不会实时改变?或者有没有其他函数可以替代它?如能解决不胜感激涕零!
因为程序运行的当前相对路径一经改变,所有基于相对路径的内容都会出错,例如保存一个123.dat文件到 相对路径/save/文件夹上,原本程序的最终路径是E://程序/save/,但如果此时当前相对路径变成了桌面,就变成/桌面/save了,此时桌面就多了save这个文件夹,并且里面保存了123.dat文件.
错误就在于使用GetOpenFileName进行选择文件过程中,同时利用相对路径执行保存123.dat的操作后,将123.dat这个文件保存在错误的路径上,如保存在桌面/save/,原本不想保存在这里的.
确认不是代码问题,我正在使用GetOpenFileName进行选择文件过程中,我另外的线程会自动执行保存123.dat的操作,而保存的路经是以相对路经为依据的,这里由于特殊原因是不能改的,所以才这么郁闷。

终于解决了。。。原来可以通过设置回调函数监视对话框改变文件夹路径更改的信息,一接受这个消息立即将相对路径恢复正确的路径。愿意将全部分数给听得懂我说的朋友,交个朋友。
最佳答案
可以这样,但是不一定绝对可靠。

因为线程的抢占是代码级的,所以很有可能你的回调函数正在执行,或还未执行的时候,另一个线程保存了文件,这样的话还是会出现问题。当然这种可能比较小。

可以使用变量控制另一个线程在选择过程中不保存文件。

GetCurrentDirectory(...);
saveAble = false;
GetOpenFileName(...);
saveAble = true;
SetCurrentDirectory(...)

另一线程:
if(saveAble) SaveFile("save\\123.data");

当然如果你的程序必须在选择过程中保存文件的话你的方法也是可取的。
全部回答
你想干嘛?
是有这个问题,openfile savefile 都回更改当前文件夹路径, 备份恢复好像是比较正常的解决方法, 回调函数还得重新写,得不偿失,我不明白你为什么不用绝对路径呢?
太麻烦了,在保存文件前,可以先获取执行程序的所在路径,参考代码: void GetProgramPath(LPTSTR pszBuffer, DWORD dwSize) { DWORD dwLength = GetModuleFileName(GetModuleHandle(NULL), pszBuffer, dwSize); while (dwLength && pszBuffer[dwLength] != '\\') { dwLength--; } if (dwLength) pszBuffer[dwLength + 1] = '\0'; }
C语言无法实现该操作。你可以试着用java
仔细检查你的代码...正常正确情况下不会出现楼主现象...
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问建筑面积是97.70公摊是23实用面积是多少
大连开发区红星海初中怎么样?
电脑开机黑屏,无报警声音,显卡风扇声音很大
奥斯美吴川旗舰店我想知道这个在什么地方
蛤蟆w会打断厄加特的大招吗?
肺静脉高压是指肺毛细血管—肺静脉压超过()。
阳新县黄石幸福人家地址在哪,我要去那里
想知道: 惠来县 从惠来县到揭西县怎么坐公交
手机设置字体后 为什么登录微信进去每次字体
麻竹高速公路/安广线(路口)在什么地方啊,我
新买高层商品房公积金贷款初审通过了,请问还
山东外国语职业学院有没有春考培训机构!
小米note 怎么开启分屏模式
盐城闯红灯多久网上能查到?
雨花区长沙兰卡贝儿国际美容养生会所(雨花店)
推荐资讯
解放路/北西后三街(路口)我想知道这个在什么
一座城市如同一片旷野的含义
派出所民警讯问公共汽车上的一桩盗窃案的嫌疑
初中议论文有关名人挫折失败的实例
天降之物第一二季百度云无修版
THDI 是指什么?
今天的2623火车在沈阳那个检票口
神马是什么意思
重庆沙坪坝有没有韩国品牌化妆品专卖店阿?
如何开始Keil程序的仿真调试
商务管理专业和市场营销专业哪个更好就业?
H1Z1人死后怎么看别人视角
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?