int nPos;
#ifdef _DEBUG//在调试状态 \debug\*.exe   相当于去掉了"\debug"
nPos = m_filename.ReverseFind ('\\');//搜索最后一个'\'字符的位置
CString sPath = m_filename.Right (nPos);//保留最后一个'\'字符的左侧串(不包括'\')
#endif
nPos = m_filename.ReverseFind('\\');//只保留 "\xx.exe"
sPath = m_filename.Right(nPos);   AfxMessageBox(sPath);return;
错在哪里呢.显示xe,而应该是abc.exe

解决方案 »

  1.   

    m_filename.Right (m_filenae.GetLength() - nPos);// try it
      

  2.   

    char chFileFullName[_MAX_FNAME+4] ; 
    char chExtName[_MAX_EXT] ; 
    char szDriveName[_MAX_DRIVE]; 
    char szDirName[_MAX_DIR]; 
    char szFileName[_MAX_FNAME]; 
    char szExt[_MAX_EXT]; 
    char chDriveName[_MAX_DRIVE+1]; 
    char chDescription[32]; 
    memset(chDescription,0,32); 
    _tsplitpath(chFileName,szDriveName,szDirName,szFileName,szExt); 
    strcpy(chFileFullName,szFileName); 
    strcat(chFileFullName,szExt);
      

  3.   

    nPos = m_filename.ReverseFind ('\\');
    CString sPath = m_filename.Right (nPos);
    即可了,你后边的代码没用。
      

  4.   

    我果然猜对了。楼主对于CString ::ReverseFind()的返回值没有理解清楚。该返回值返回的是一个CString 的从0开始的找到该字符的索引号。而不是倒数的索引号。例如:
    CString s = "abcdefghijk";
    int nPos = s.ReverseFind('i');猜猜nPos 的值等于多少?
    (A) 2 (B) 3 (C) 8 (D) 9 (E) 10正确答案是C: 8, 它是从开头开始算起的,0,1,2,3...因此,楼主的改正方法是: #ifdef _DEBUG//在调试状态 \debug\*.exe   相当于去掉了"\debug"
    nPos = m_filename.ReverseFind ('\\');//搜索最后一个'\'字符的位置
    CString sPath = m_filename.Right (m_filename.GetLength() -nPos - 1);
    #endif
    nPos = m_filename.ReverseFind('\\');
    sPath = m_filename.Right(m_filename.GetLength() -nPos);
      

  5.   

    string.right()的参数是字符数目,而不是索引值
      

  6.   

    推荐CPath类
    http://www.codeproject.com/file/cpath.asp