1、VS调试时程序的当前路径是工程路径,不是debug或release目录;而直接运行时,当前路径是可执行文件路径。
相对路径,所谓相对位置都是相对自己的。即VS调试时,相对的是工程文件目录,直接运行时是可执行文件路径。
2、所以最好使用GetModuleFileName获取绝对路径,具体代码参考:
char exeFullPath[MAX_PATH]; // MAX_PATH
GetModuleFileName(NULL,exeFullPath,MAX_PATH);//得到程序模块名称,全路径,也就是当前运行程序的全路径。
/*解析路径*/
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
_splitpath(exeFullPath, drive, dir, NULL,NULL);
CString strPath;
strPath.Format("%s%s", drive, dir);
CMarkup xml;
string strCfgName = strPath + "AESEncryptAndDecryptWithCMS.xml";//strPath为当前运行程序所在目录
3、fstream不支持中文路径,解决办法:
setlocale(LC_ALL,"Chinese-simplified");//设置中文环境
ifstream ofs(strCfgName.c_str());
if(!ofs.is_open())
{
TEST_ERROR("读取失败");
//return false;
}
setlocale(LC_ALL,"C");//还原