Как создать текстовый файл в папке на рабочем столе

У меня проблема в моем проекте. На моем рабочем столе есть папка проекта. Я хочу создать текстовый файл и написать что-нибудь включить этот текстовый файл. Это мой код:

ofstream example("/Users/sample/Desktop/save.txt");

Но я хочу, чтобы он мог запустить другой Mac. Я не знаю, что я должен написать адрес для save.txt.

Может кто-нибудь мне помочь?

3 ответа

Решение

Создать файл и написать текст просто, вот пример кода:

   #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);

Правила, определяющие, где вы должны сохранить файл, различаются в зависимости от платформы. Один из вариантов - включить его в ваш скрипт компиляции (то есть вы #define SAVEGAME_PATH как часть вашей конфигурации компиляции), и, таким образом, сам ваш код остается более независимым от платформы.

Альтернатива - найти библиотеку управления сохранением данных, которая уже разработана для переноса на разные платформы. Будь то C или C++ или какая-либо бинарно-совместимая библиотека, тогда уже не имеет значения.

Только не ожидайте, что это будет частью C++ (языка).

Если вы хотите, чтобы ваша программа работала на разных платформах, вам лучше использовать относительный путь. например. "./output.txt", или лучше" GetSystemDirectory() ", чтобы получить системный каталог для создания файла, а затем вы можете записать или прочитать файл с тем же путем.

Другие вопросы по тегам