現在実行中のものを取得する方法exeが存在するパスの二重斜線形式?---GetModuleFileNameの使用
2297 ワード
まず簡単なプログラムを見てみましょう.
しかし、プログラムで上記の力を利用すれば、だめです.C言語ではエスケープ文字なので、次のように見てみましょう.
次のプログラムはokです.
引き続き見てみましょう
不思議に思わないでください.はエスケープ記号で、\は1つのを表します.だから、次のコードは間違っています.
上記の議論に基づいて、本題に戻り、現在のパスのコードを取得します.
要するに、エスケープ記号を理解して、すべてが簡単です.
#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;
}
不思議に思わないでください.はエスケープ記号で、\は1つのを表します.だから、次のコードは間違っています.
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;
}
要するに、エスケープ記号を理解して、すべてが簡単です.