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} 在对文件进行操作时候 要切换根目录