プロジェクトに問題があります。デスクトップにプロジェクトフォルダがあります。テキストファイルを作成して、このテキストファイルを含む何かを書きたいです。それが私のコードです:
ofstream example("/Users/sample/Desktop/save.txt");
しかし、私はそれが他のマックを実行できるようにしたいです。save.txtのアドレスを何に書くべきかわかりません。
誰か助けてもらえますか?
ファイルを作成し、それにテキストを書き込むのは簡単です。サンプルコードは次のとおりです。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
std::ofstream o("/Users/sample/Desktop/save.txt");
o << "Hello, World\n" << std::endl;
return 0;
}
それがあなたの質問に答えることを願っていますが、私があなたの質問を正しく理解しているかどうかはわかりません。そうでない場合は、あなたが達成しようとしていることの詳細を正しく追加してください。
[更新]:わかりました。コメントで問題が解決したと思います。
あなたの本当の質問は、ゲームをプレイしているユーザーのデスクトップにファイルを保存したいということです。したがって、現在のユーザーのデスクトップのパスを取得することが問題です。
デスクトップパスを取得するためのポータブルな方法があるかどうかはわかりませんが、次の方法で実行できます。
Windowsの場合:SHGetSpecialFolderPath()関数
を使用し
サンプルコード:
char saveLocation[MAX_PATH] = {0};
SHGetSpecialFolderPath(NULL, saveLocation, CSIDL_DESKTOPDIRECTORY, FALSE);
//Now saveLocation contains the path to the desktop
//Append your file name to it
strcat(saveLocation,"\\save.txt");
ofstream o(saveLocation);
Linuxの場合:
環境変数$HOMEを使用する
サンプルコード:
string path(getenv("HOME"));
path += "/Desktop/save.txt";
ofstream o(path);
ファイルを保存する場所を定義するルールは、プラットフォームごとに異なります。1つのオプションは、それをコンパイルスクリプトの一部にすることです(つまり、コンパイル構成の一部として#define SAVEGAME_PATHを使用します)。したがって、コード自体はプラットフォームに依存しません。
別の方法は、異なるプラットフォーム間で移植されるようにすでに設計されているデータ保存管理ライブラリーを見つけることです。それがCまたはC++であるか、あるいはバイナリ相互運用可能なライブラリであるかどうかは、もはや重要ではありません。
それがC++(言語)の一部であると期待しないでください。
プログラムをプラットフォーム全体で実行する場合は、相対パスを使用することをお勧めします。例えば。「./output.txt」または「GetSystemDirectory()」を使用してシステムディレクトリを取得し、ファイルを作成すると、同じパスでファイルの書き込みまたは読み取りを行うことができます。