注意,CFileDialog 会改变当前路径

    今天用到 CFileDialog  来保存文件,无意中发现之前读取XML文件方法失败了,LoadFile 总是返回NULL。之前LoadFile 都是用相对路径来加载XML文件,问题很明显,应该是路径不对,于是用绝对路径测试了一下,没错,就是路径问题! 

 原因分析:当我们的程序运行时,默认的当前路径是程序的当前路径,比如当前程序的路径为 D:\Debug\1.exe  ,那么当前路径为D:\Debug, 这个可以用::GetCurrentDirectory来获取到;当用CFileDialog  来保存文件后,当前路径即改为保存文件的路径,于是之前用相对路径来加载XML文件就会出错。

        解决方法:不用相对路径,而是改用绝对路径。这里自己实现了一个获取绝对路径的方法,具体代码如下:

 

/************************************************************************/
	/* 
		fileName: 传入文件名
		filePath: 传出文件名的绝对路径
	*/
	/************************************************************************/
	BOOL GetPath(char * fileName,char* filePath)
	{
		if (fileName==NULL)
		{
			return FALSE;
		}
		char path[1024];
		memset(path,0,sizeof(path));
		if (0==GetModuleFileName(NULL,path,sizeof(path)))
		{
			return FALSE;
		}

		int strLenth=strlen(path);
		int i=1;	//从字符串后面开始遍历,直到遇到'\'
		while(path[strLenth-i]!='\\')
		{
			path[strLenth-i]='\0';
			i++;
		}

		strcpy(filePath,path);
		strcat(filePath,fileName);

		return TRUE;

	}

调用:

char filePath[1024];

BOOL nRet=GetPath("config\\config.xml",filePath);


上面的代码不知道有没有更好的方法来代替。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值