Я успешно пишу в файл в папке, которая запускает пример:
// 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
, все будет хорошо) !! Как я могу написать с динамическим путем, как указано выше (не конкретный путь)? Спасибо!
Не уверен, что вы подразумеваете под «динамическим путем»; динамический путь это тот, который
будет читаться динамически (и, вероятно, будет в 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"
должен найти файл указанный первым
абсолютный путь
Если под динамическим вы имеете в виду относительное, вам нужно избавиться от ведущих /
, поскольку это делает его абсолютным путем:
path = "xml/kingfisher.txt";
Просто помните, что этот файл относится к вашему текущему рабочему каталогу, поэтому вам, вероятно, нужно убедиться, что он установлен на /home/kingfisher/Desktop/TestWrite File
чтобы это работало.
Если под динамическим вы подразумеваете изменчива, Вы можете изменить его, когда захотите:
const char *path = "/tmp/dummy";
:
path = "/home/.profile"; // Note path, NOT *path
const
просто означает, что вам не разрешено изменять данные позади указатель Вы можете изменить указатель сам по желанию.
*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()
,