Ubuntu — Записать файл в папку с динамическим путем Stack Overflow

Я успешно пишу в файл в папке, которая запускает пример:

// I run "test" executable file in "TestWrite File" folder
const char *path="/home/kingfisher/Desktop/TestWrite File/xml/kingfisher.txt";
std::ofstream file(path); //open in constructor
std::string data("data to write to file");
file << data;

Однако, если я пытаюсь написать с динамическим путем: *path = "/xml/kingfisher.txt", это идет не так (в Windows, все будет хорошо) !! Как я могу написать с динамическим путем, как указано выше (не конкретный путь)? Спасибо!

0

Решение

Не уверен, что вы подразумеваете под «динамическим путем»; динамический путь это тот, который
будет читаться динамически (и, вероятно, будет в std::string).

С другой стороны, вы, кажется, путаете абсолютный путь и относительный
дорожка. Если имя файла начинается с '/' (под Unix), или с '/'
или '\\'возможно предшествует "d:" под
Windows, это абсолютно; поиск файла начнется с корня
файловой системы (на указанном диске в случае Windows). В
во всех остальных случаях это относительно; поиск файла начнется с
текущий рабочий каталог. В вашем примере оба
"/home/kingfisher/Desktop/TestWrite File/xml/kingfiger.txt" а также
"/xml/kingfisher.txt" являются абсолютными. Если текущий рабочий каталог
является "/home/kingfisher/Desktop/TestWrite File", затем
"xml/kingfisher.txt" должен найти файл указанный первым
абсолютный путь

1

Другие решения

Если под динамическим вы имеете в виду относительное, вам нужно избавиться от ведущих /, поскольку это делает его абсолютным путем:

path = "xml/kingfisher.txt";

Просто помните, что этот файл относится к вашему текущему рабочему каталогу, поэтому вам, вероятно, нужно убедиться, что он установлен на /home/kingfisher/Desktop/TestWrite File чтобы это работало.

Если под динамическим вы подразумеваете изменчива, Вы можете изменить его, когда захотите:

const char *path = "/tmp/dummy";
:
path = "/home/.profile";          // Note path, NOT *path

const просто означает, что вам не разрешено изменять данные позади указатель Вы можете изменить указатель сам по желанию.

3

*path = "/xml/kingfisher.txt"

Это неверно, так как он пытается разыменовать ваш const char* и измените содержимое. Это неопределенное поведение, так как данные являются постоянными.

Просто объявите свой путь, чтобы быть std::string начать с:

std::string path = "/home/kingfisher/Desktop/TestWrite File/xml/kingfisher.txt";

Затем позже вы можете назначить любое другое значение в строку std, и это operator= динамически изменит его внутренности для вас:

path = "my/new/path";

Вы можете использовать это с ofstream так же, как и раньше, и если вам нужно передать его функции, которая ожидает const char * просто пройдите path.c_str(),

1
По вопросам рекламы [email protected]