VC/MFC 相对路径问题
我写的一个打开文件的程序,其中相对路径代码是这样写的:
CString strPath;
::GetModuleFileName( NULL, strPath.GetBuffer(MAX_PATH), MAX_PATH );
strPath.ReleaseBuffer();
strPath = strPath.Left(strPath.ReverseFind(_T('\\')));
ini_file_name = strPath + "\\ini\\Var_class.TXT";
if(!file.Open(_T(ini_file_name),CFile::modeRead))
{
MessageBox("打开分类文件错误!", NULL,NULL);
return;
}
为什么我运行的时候一直是"打开分类文件错误!", 哪里出错了吗?资源文件都加载进来了,用绝对路径是可以打开的,但是不方便。请高手指点~
[解决办法]
看上去没问题,你最好把每一步操作后的字符串打印出来看看
[解决办法]
你这就是绝对路径。
非常简单的就知道哪里错了,你只需要MessageBox(ini_file_name)看看即可。很有可能是哪里多了一个斜杠,或者少了一个斜杠。
[解决办法]
[解决办法]
GetModuleFileName 运行时,获取的应该是 Debug 文件夹。
你输出 ini_file_name 看看是否正确。
[解决办法]
- C/C++ code
CString strPath; GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); strPath.ReleaseBuffer(); int nPos; nPos=strPath.ReverseFind('\\'); strPath=strPath.Left(nPos);
[解决办法]
自己调试看下输出的是什么路径
[解决办法]
ini_file_name取得跟径不对,你在debug下再建个ini目录,另外,你看看是不是多了个'\'
[解决办法]
直接看看ini_file_name的路径对不?
[解决办法]
这个问题我碰到过类似的
//获取当前程序的完整路径,不包括程序名
CString Setpersonality::GetCurDir()
{
TCHAR sDrive[_MAX_DRIVE];
TCHAR sDir[_MAX_DIR];
TCHAR sFilename[_MAX_FNAME],Filename[_MAX_FNAME];
TCHAR sExt[_MAX_EXT];
GetModuleFileName(AfxGetInstanceHandle(), Filename, _MAX_PATH); //绝对路径,包括程序名
_tsplitpath(Filename, sDrive, sDir, sFilename, sExt); //把上述得到的路径给拆了
CString homeDir(CString(sDrive) + CString(sDir) );
int nLen = homeDir.GetLength();
if(homeDir.GetAt(nLen-1) != _T( '\\ '))
homeDir += "\\ ";
return homeDir;
}