今天用到 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);
上面的代码不知道有没有更好的方法来代替。