2024年5月2日发(作者:)

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

今天学习了关于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)Buff

erSize);

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}

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