使用动态路径C ++在文件夹中写入文件

时间:2012-10-09 08:33:59

标签: c++ ubuntu ofstream

我成功写入了运行example:

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

3 个答案:

答案 0 :(得分:3)

如果动态是指亲戚,你需要摆脱领先的/,因为这使它成为绝对路径:

path = "xml/kingfisher.txt";

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

如果,通过动态,您的意思是 changable,,您可以随时更改它:

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

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

答案 1 :(得分:1)

*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()的函数。

答案 2 :(得分:1)

不确定“动态路径”是什么意思;动态路径是一个 将被动态读取(因此可能会在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"应该找到第一个指定的文件 绝对路径名。