• MFC 检测文件存在、获取当前路径、新建文件夹


    直接上代码:

    ///////查看执行文件的路径下面是否有db文件夹,若没有则新建/////////

    CFileFind cff;
    if (cff.FindFile(_T("db")) == 0)     //当前路径,没找到db文件夹
    {
      CString strText;
      TCHAR exepath[MAX_PATH]={0};
      ::GetModuleFileName(NULL,exepath,MAX_PATH);   //获取exe路径,存于exepath中
      strText=exepath;                  
      strText = strText.Left(strText.ReverseFind('\'));   //找到路径中倒数第一个/,并将其后面的字符掐掉,注意转义字符的表达\
      strText += _T("\");
      strText += _T("db");      //新的路径,新的文件名
    CreateDirectory(strText,NULL); // 生成db文件夹
    }

    以下为转载,未核实

    1. 获取Debug或Release所在的路径
    CString GetModuleDir() 

     HMODULE module = GetModuleHandle(0); 
     char pFileName[MAX_PATH]; 
     GetModuleFileName(module, pFileName, MAX_PATH); 
     
     CString csFullPath(pFileName); 
     int nPos = csFullPath.ReverseFind( _T('\') ); 
     if( nPos < 0 ) 
      return CString(""); 
     else 
      return csFullPath.Left( nPos ); 
    }

    2. 获取当前工作路径(dsp所在路径)

    //获取工作路径
    CString GetWorkDir() 
    {  
     char pFileName[MAX_PATH]; 
     int nPos = GetCurrentDirectory( MAX_PATH, pFileName); 
     
     CString csFullPath(pFileName);  
     if( nPos < 0 ) 
      return CString(""); 
     else 
      return csFullPath; 
    }

    以下为转载,未核实

    C/MFC如何获得应用程序当前路径(整理)

    第一种方法:
    DWORD GetCurrentDirectory(
      DWORD nBufferLength,  // size, in characters, of directory buffer
      LPTSTR lpBuffer       // pointer to buffer for current directory
    );
    BOOL SetCurrentDirectory(
      LPCTSTR lpPathName   // pointer to name of new current directory
    );
    第二种方法
    用GetModuleFileName得到应用程序的文件名(第一个参数为NULL)
    再用_splitpath分析文件名得到路径
    例如:
    //得到当前路径
     /*char buf[100];
     GetCurrentDirectory(sizeof(buf),buf);
     MessageBox(buf);
     HINSTANCE hInst=NULL;
     hInst=AfxGetApp()->m_hInstance;
     char path_buffer[_MAX_PATH];
     GetModuleFileName(hInst,path_buffer,sizeof(path_buffer));//得到exe文件的全路径
     //分离路径和文件名。
        char drive[_MAX_DRIVE];
        char dir[_MAX_DIR];
        char fname[_MAX_FNAME];
        char ext[_MAX_EXT];
     _splitpath( path_buffer, drive, dir, fname, ext );
     CString Path;
     Path.Format("%s%s",drive,dir);
    char path[300];
    strcpy(path,drive);
    strcat(path,dir);
    又或:
    TCHAR exeFullPath[MAX_PATH];
        CString strPath;
        GetModuleFileName(NULL,exeFullPath,MAX_PATH);
        strPath=(CString)exeFullPath;
        int position=strPath.ReverseFind('\');
        strPath=strPath.Left(position+1); 

        TCHAR FilePath[MAX_PATH];
        GetModuleFileName(NULL,FilePath,MAX_PATH);
        (_tcsrchr(FilePath,'\'))[1] = 0; 
        lstrcat(FilePath,_T("MY.ini")); 

    第三种方法:
    VC中__argv[0]可以得到exe的程序名,然后用_splitpath可以分解得到程序路径。
    第四种方法
    #include<direct.h>
    char buf[_MAX_PATH];
    _getcwd(buf,_MAX_PATH);
    第四种是得到操作系统所在的目录
    char buf[100];
     GetSystemDirectory(buf,100);
     MessageBox(buf);
     
    以下未核实
    http://www.cnblogs.com/project/archive/2010/12/02/1894494.html
  • 相关阅读:
    网址收藏
    Linux创建swap文件
    vim命令大全
    char * 和字符数组
    JSR 203终于要出来啦
    对象关系技术的探讨
    最近编码更流畅了
    孤独终止的地方,就是广场开始的地方......
    不要奢望.NET能够跨平台
    实现了HTTP多线程下载
  • 原文地址:https://www.cnblogs.com/vipwtl/p/6091115.html
Copyright © 2020-2023  润新知