比如
C:\WINDOWS\system32\test.exe我怎么把这个路径 分成C:\WINDOWS\system32和
test.exe非MFC 

解决方案 »

  1.   

    简单,自己从头开始判断,首先判断是否有盘符,其次从“\\”开始,找到最后一个“\\”(可以用CRT的strrchr函数),在最后一个“\\”到“\0”之前这个子字符串,就是文件名,最后一个“\\”之前就是路径。注意不要在子字符串中判断是否包含“.”,因为不是所有文件名都包含扩展名的。
      

  2.   


    char drive[MAX_PATH], dir[MAX_PATH], title[MAX_PATH], ext[MAX_PATH];
    splitpath("c:\\WINDOWS\\System32\\test.exe", drive, dir, title,ext);
    strcat(drive, dir);
    strcat(title, ext);drive 和title就是你要的
      

  3.   

    在WINDOW程序中,可以直接调用MFC封装好的函数来得到文件的路径。
           void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );
           通过调用这个函数,可以将driver指向文件所在的盘符(如C:),dir指向文件的目录( \sample\crt\ ,这里没有盘符),fname指向文件的文件名(makepath,没有前面的路径),ext指向文件的扩展名(如.c,有带小数点)。
           这样我们就可以得到这个文件的基本信息了。当然通过这些组合就可以得到相关文件的文件名的信息。例如得到文件的全名就可以用strcpy(.....)将*fname和*ext组合起来。
    void CDlgDecNormal::OnDecryptTo() 
    {
        char szDrv[_MAX_DRIVE], szDir[_MAX_DIR], szFile[_MAX_FNAME];
        _splitpath(m_strSource,szDrv,szDir,szFile,NULL);
        
        CString strTargetPath;
        strTargetPath.Format("%s%s%s",szDrv,szDir,szFile);
        
        strTargetPath+="\\";    CString strFiles;    if (m_lcFiles.GetSelectedCount() <= 0)
        {
            CString str;
            str = GetFileFullName( m_strSource );
            if( m_strAddr.Find("\\")!=-1)
            {
                m_strAddr.Replace(str+"\\","");
                m_strAddr+="\\";
            }
            else
        
                m_strAddr.Replace(str,"");
                
            CString str1;
            str1 =m_strTargetFolder+ m_strAddr;
            strFiles = m_strTargetFolder;        CString strAdd;
            
            CString strAll = str1 + "*.*";
            _finddata_t fd = { 0 };
            long hFile = _findfirst( strAll, &fd );
            if( hFile != -1 )
            {
                do 
                {
                    if( strcmp( fd.name, "." ) == 0 || strcmp( fd.name, ".." ) == 0 )
                        continue;
                    strAdd.Format( "|%s%s", str1, fd.name );
                    strFiles += strAdd;
                } while( _findnext( hFile, &fd ) == 0 );
                _findclose( hFile );
            }
     
        }
        else
        {
            CString strAdd;
            strFiles = m_strTargetFolder;
            POSITION pos = m_lcFiles.GetFirstSelectedItemPosition();
            int nIndex;        UpdateData();
            CString strTemp;
            int iIndex = m_strAddr.Find( "\\", 0 );
            if ( iIndex >= 0 )
            {
                strTemp = m_strAddr.Mid( iIndex + 1 );
            }
            while (pos != NULL)
            {
                nIndex = m_lcFiles.GetNextSelectedItem(pos);
                strAdd.Format("|%s%s\\%s",m_strTargetFolder, strTemp, m_lcFiles.GetItemText(nIndex,0));
                strFiles += strAdd;
            }
        }
        CDlgDecPath dlg(strFiles,FALSE,strTargetPath);
        dlg.DoModal();
    }本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dkbrain/archive/2009/09/26/4596417.aspx
      

  4.   

    char path_buffer[_MAX_PATH] = "C:\\sample\\1.txt";
       char drive[_MAX_DRIVE];
       char dir[_MAX_DIR];
       char fname[_MAX_FNAME];
       char ext[_MAX_EXT];   _splitpath( path_buffer, drive, dir, fname, ext ); 
      

  5.   


            char path[] = "C:\\WINDOWS\\system32\\test.exe";
    char *pLast = strrchr( path, '\\');
    if ( pLast == NULL )
    {
    return;
    }
    char dir[MAX_PATH] = {0};
    char exeName[MAX_PATH] = {0};
    strcpy( exeName, pLast+1 );
    *pLast = 0;
    strcpy( dir, path );
      

  6.   


    直接使用_splitpath的前提是全路径的合法性是有保障的。如果没有保障而使用_splitpath,你需要初始化一下每个BUFFER,函数返回需要判断一下STRLEN是否为0,但这也不能保证万一,你可以试试"C::\\78",看看DIR返回是什么。
      

  7.   

    我只说思路,具体的操作还是你自己来弄比较好,有助于你的学习。
    1、先将“C:\WINDOWS\system32\test.exe”字符串赋值给一个变量比如Temp.
    2、寻找到最后一个“\”字符,然后截断字符串,
    3、“\”字符以前字符串就是路径,剩下的自然就是文件名了。希望对你有帮助。