先来看一个简单的程序:
#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;
}
总之, 理解了转义符号, 一切都简单。