您的位置:首页 > 其它

如何获取当前运行的.exe所在路径的双斜线形式?---利用GetModuleFileName

2014-11-28 23:42 686 查看
        先来看一个简单的程序:

#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
char  szBuf[1025] = {0};
GetModuleFileName(NULL, szBuf, sizeof(szBuf));
cout << szBuf << endl; // C:\Documents and Settings\Administrator\桌面\cpp\test\Debug\test.exe

return 0;
}


        但是, 你要是在程序中利用上述路劲, 就不行了, 因为\在C语言中是转义字符, 下面我们看看 :

#include <fstream>
using namespace std;

int main()
{
ofstream outFile("C:\Documents and Settings\Administrator\桌面\MYCPP\test.txt"); // 不会生成test.txt文件
outFile << "hello world" << endl;

return 0;
}


      而下面程序是ok的:

#include <fstream>
using namespace std;

int main()
{
ofstream outFile("C:\\Documents and Settings\\Administrator\\桌面\\MYCPP\test.txt"); // 会生成test.txt文件
outFile << "hello world" << endl;

return 0;
}


       我们继续来看:

#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
char  szBuf[1025] = {0};
GetModuleFileName(NULL, szBuf, sizeof(szBuf));
cout << szBuf << endl; //   C:\Documents and Settings\Administrator\桌面\cpp\test\Debug\test.exe

if(0 == strcmp(szBuf, "C:\\Documents and Settings\\Administrator\\桌面\\cpp\\test\\Debug\\test.exe"))
{
cout << "yes" << endl; //   yes
}
else
{
cout << "no" << endl;
}

return 0;
}


      不要奇怪, \是转义符号, \\才表示一个\, 所以, 下面代码是错误的:

int main()
{
char c = '\'; // error
return 0;
}


     根据上面的讨论, 我们回到正题, 获取当前路径的代码为:

 

#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
char   szBuf[1025] = {0};
GetModuleFileName(NULL, szBuf, sizeof(szBuf));

char *p = strrchr(szBuf, '\\');
*p = '\0';

strcat(szBuf, "\\test.txt");  // 强调一下, strcat非常不安全

cout << szBuf << endl; // 本身是双斜线的, 输出显示的是单斜线的

ofstream outFile(szBuf); // 会生成test.txt文件
outFile << "hello world" << endl;

return 0;
}


        总之, 理解了转义符号, 一切都简单。

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐