0

我成功写入运行示例的文件夹中的文件:

// 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,它会很好)!我如何使用上面的动态路径(不是特定路径)编写?谢谢!

4

3 回答 3

3

如果动态是指相对的,则需要去掉前导/,因为这使它成为绝对路径:

path = "xml/kingfisher.txt";

请注意,此文件与您当前的工作目录相关,因此您可能需要确保将其设置/home/kingfisher/Desktop/TestWrite File为才能正常工作。

如果动态,你的意思是可变的,你可以随时改变它:

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

const只是意味着您不允许更改指针后面的数据。您可以随意更改指针本身。

于 2012-10-09T08:41:22.373 回答
1
*path = "/xml/kingfisher.txt"

这是不正确的,因为它试图取消引用您const char*并修改内容。这是未定义的行为,因为数据是 const。

只需声明您的路径为 astd::string开始:

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

然后稍后您可以为 std 字符串分配您喜欢的任何其他值,它operator=会为您动态更改其内部结构:

path = "my/new/path";

你可以ofstream像以前一样使用它,如果你需要将它传递给一个需要const char *just pass的函数path.c_str()

于 2012-10-09T08:37:58.650 回答
1

不确定“动态路径”是什么意思;动态路径是动态读取的路径(因此可能在 中std::string)。

另一方面,您似乎混淆了绝对路径和相对路径。如果文件名以 a 开头'/'(在 Unix 下),或者以 a'/' 或 a开头,在 Windows 下'\\'可能在前面,它是绝对的;文件搜索将从文件系统的根目录开始(在 Windows 的情况下在指定的驱动器上)。在所有其他情况下,它是相对的;文件的搜索将从当前工作目录开始。在您的示例中, 和 都是绝对的。如果当前工作目录是,那么 应该找到第一个绝对路径名指定的文件。"d:""/home/kingfisher/Desktop/TestWrite File/xml/kingfiger.txt""/xml/kingfisher.txt""/home/kingfisher/Desktop/TestWrite File""xml/kingfisher.txt"

于 2012-10-09T08:42:13.217 回答