Posted on 2008-02-21 11:48
花之剑 阅读(1337)
评论(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();
1
int ExtractFilePath(char *szProgramPath, char *szAppFullFileName)
2![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
3
ASSERT(szAppFullFileName);
4
if (!szAppFullFileName)
5![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
6
return false;
7
}
8
9
char *pBUffer = szAppFullFileName;
10
int len = strlen(pBUffer)-1;
11
while(pBUffer[len] != '\\')
12![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
13
pBUffer[len--] = '\0';
14![](/Images/OutliningIndicators/InBlock.gif)
15
}
16![](/Images/OutliningIndicators/InBlock.gif)
17
pBUffer[len] = '\0';
18
memcpy(szProgramPath,szAppFullFileName,len);
19
return true;
20
} 在对文件进行操作时候 要切换根目录