私は一日中私を狂わせている単純な問題を抱えています。現在のユーザーの名前を知らずに、現在のユーザーのデスクトップでファイルを開こうとしています。
アイデアは、APIへのGetCurrentUser呼び出しを使用してユーザー名を取得することです。次に、文字列をフォーマットしてフルパスディレクトリを指定し、その変数をfopenに渡してファイルを開きます。これが私が取り組んでいるコードです。コンパイラエラーは発生せず、正常にコンパイルされますが、ファイルへの書き込みはありません。
int main() {
char pathName[200]; // declaring arrays
char userName[100];
DWORD userNameSize = sizeof(userName); // storage for user name
if (!GetUserName(userName, &userNameSize)) { cout << "user not found"; }
else { cout "hello" << userName;} // error checking
// format for Windows 7 desktop
sprintf(pathName, "\"C:\\Users\\%s\\Desktop\\text.txt\"", userName);
cout << pathName << "\n"; // confirms correct location
const char* fileLocation = pathName; // pointer to full path to pass into fputs
const char* test = "test"; // test information to write to file to confirm
FILE *f = fopen(fileLocation,"a+"); // open file in append mode
fputs(test, f); // write to file
fclose(f); // flush and exit
return 0;
}
文字列をフォーマットするために別の呼び出しを使用する必要があるかもしれませんか?または、fileLocationを別の変数タイプとして宣言しますか?
私はC++にかなり慣れていないので、現在のユーザーのデスクトップでファイルを開くのに役立つヒントをいただければ幸いです。ありがとう。
ジェリーのアドバイスに応じて編集:
これは私の最新のコメントが言及していたものです:
#include <iostream>
#include <cstring>
#include <string>
#include <conio.h>
using namespace std;
string location ("C:\\Users\\testuser\\Desktop\\log.dat");
char cstr = char* [location.size()]; //This is a problematic line
strcpy (cstr, location.c_str());
void write(const char* c)
{
const char* fileLocation = cstr;
//const char* fileLocation = g_pathName;
FILE *f = fopen(fileLocation,"a+"); // This is the problematic line right here.
if(f!=NULL)
{
fputs(c,f); // append to end of file
fclose(f); // save so no entries are lost without being flushed
}
}
int main ()
{
write("test");
cout << "done";
_getch();
return 0;
}