共有2个问题1)c:\a\b.txt 有什么函数可以分解成:    c:\a\ 和 b.txt ?2) 我要保存临时文件,想用BT这种方式
BT 会在临时文件后加个 .rc!
比如最终文件名是 c:\b.rmvb   BT会把临时文件命名为 c:\b.rmvb.rc!
我的问题是 如果b.rmvb 这个b是一个很长的文件名,比如有_MAX_PATH这么长
那改名成b.rmvb.rc!   岂不是超过了文件名的最大长度? 请教大家这里的处理思路谢谢!

解决方案 »

  1.   

    //获取应用程序的全路径
    char exeFullPath[MAX_PATH]; 
    GetModuleFileName(NULL,exeFullPath,MAX_PATH);
    //将其格式化为字符串
    m_TempFile.Format("%s",exeFullPath);
    //去掉应用程序的全名(10为应用程序文件全名的长度)
    exeFullPath[m_TempFile.GetLength()-10]='\0';
    //得到应用程序所在路径
    m_TempFile.Format("%s",exeFullPath);
    //得到临时文件的全路径
    m_TempFile+="b.txt";
      

  2.   

    查找'\'字符,分割
    文件名超长超过了就给截掉了,如果不想把.rc后缀截掉,自己定一个处理方式,类似dos下bbbb~1也行啊:-)
      

  3.   

    #include <stdlib.h>
    #include <stdio.h>void main( void )
    {
       char path_buffer[_MAX_PATH];
       char drive[_MAX_DRIVE];
       char dir[_MAX_DIR];
       char fname[_MAX_FNAME];
       char ext[_MAX_EXT];   sprintf(path_buffer, "c:\\sample\\crt\\abc.txt" );
       _splitpath( path_buffer, drive, dir, fname, ext );
       printf( "Path extracted with _splitpath:\n" );
       printf( "  Drive: %s\n", drive );
       printf( "  Dir: %s\n", dir );
       printf( "  Filename: %s\n", fname );
       printf( "  Ext: %s\n", ext );
    }
      

  4.   

    1.可以用_splitpath分解路径
    void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );2.MAX_PATH是系统要求的,所以不要超过。
      

  5.   

    1. CString strFile =_T("c:\\a\\b.txt");
    CString strFilePath = strFile.Left(strFile.ReverseFind('\\')+1);
    CString strFileName = strFile.Right(strFile.GetLength()-strFile.ReverseFind('\\')-1);2.判断文件名长度超过_MAX_PATH就截断,windows也是这么做的
      

  6.   

    使用_splitpath.需<stdlib.h>头文件。TCHAR szPathName[MAX_PATH];
    _stprintf(szPathName,_T("c:\\a\\b.txt "));TCHAR szDrv[MAX_PATH];
    TCHAR szDir[MAX_PATH];
    TCHAR szFileName[MAX_PATH];
    _tsplitpath(szPathName, szDrv, szDir, szFileName, NULL);
      

  7.   

    _splitpath 是不是WIN16-C的函数?能处理WINDOWS下的长文件名结构吗?
      

  8.   

    1._sprintpath是C Runtime的函数,可以完成任务
    也可以用CString.ReverseFind找最后一个\然后用Left/Right来分解
    2.如果超了文件的长度限制就需要楼主变通了。
      

  9.   

    lpFileName
        [in] A pointer to a null-terminated string that specifies the name of an object to create or open.    In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File.来自 MSDN
      

  10.   

    1:用CString的操作 ReverseFind  Right就OK2.如果超了文件的长度限制就需要楼主变通了。变通之处用DOS中文件夹方式 ~ 或 ?,