花之剑'HOME

一朵飘舞在风中的雪花,挣扎着,不想被融化。

C++工作目录的相关知识

Posted on 2008-02-21 11:48 花之剑 阅读(1333) 评论(0)  编辑  收藏 所属分类: c/c++ & algorithm

今天学习了关于C++工作目录的相关知识
在写c++程序的时候,编译链接后的运行文件一般放到debug目录下面
而当前的工作目录却为程序文件的目录,
因此我们要转换工作目录到debug下,这样才方面把资源文件都放在debug下,才能方便读写文件
首先,我们获取当前运行文件全名
然后获取其目录
最后用chidr设置当前工作目录。

C++中获取当前文件的全名:
win :GetModuleFileName()
linux : readlink("/proc/self/exe",szBuffer,sizeof(szBUffer));
获取工作目录可以用getcwd(char * workpath,int size);
代码如下:

 1 int  GetSelfFileName( char  szBuffer[], size_t BufferSize)
 2 {
 3      int  nResult   =   false ;
 4      int  nRetCode  =   false ;
 5
 6 #ifdef _WIN32
 7     nRetCode  =  ( int )GetModuleFileName(NULL, szBuffer, (DWORD)BufferSize);
 8      if  ( ! nRetCode)
 9          goto  Exit0;
10 #else
11     nRetCode  =  readlink( " /proc/self/exe " , szBuffer, BufferSize);
12      if  ((nRetCode  <   0 ||  (nRetCode  >=  ( int )BufferSize))
13          goto  Exit0;
14     szBuffer[nRetCode]  =   ' \0 ' ;
15 #endif
16
17     nResult  =   true ;
18 Exit0:
19      return  nResult;
20 }

设置当前程序目录为工作目录方法
获取当天程序的全路径,去掉程序名
然后chidr();
 1int  ExtractFilePath(char *szProgramPath, char *szAppFullFileName)
 2{
 3    ASSERT(szAppFullFileName);
 4    if (!szAppFullFileName)
 5    {
 6        return false;
 7    }

 8    
 9    char *pBUffer = szAppFullFileName;
10    int len = strlen(pBUffer)-1;
11    while(pBUffer[len] != '\\')
12    {
13        pBUffer[len--= '\0';
14
15    }

16
17    pBUffer[len] = '\0';
18    memcpy(szProgramPath,szAppFullFileName,len);
19    return true;
20}



在对文件进行操作时候 要切换根目录

只有注册用户登录后才能发表评论。


网站导航: