我成功写入了运行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
中,它会好的)!!我如何用上面的动态路径编写(不是特定的路径)?谢谢!
答案 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"
应该找到第一个指定的文件
绝对路径名。