这是我的代码
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::fstream file;
file.open("text.txt", std::fstream::in | std::fstream::out |
std::fstream::app);
if(!file.is_open())
{
std::cout << "Could not open file(test.txt)" << std::endl;
} else {
file << "These are words \nThese words are meant to show up in the new file \n" <<
"This is a new Line \nWhen the new fstream is created, all of these lines should be read and it should all copy over";
std::string text;
file >> text;
std::cout << text << std::endl;
file.close();
std::fstream newFile;
newFile.open("text2.txt", std::fstream::in | std::fstream::out |
std::fstream::app);
if(newFile.is_open())
{
newFile << text;
}
}
}
我正在尝试将text.txt
的内容复制到text2.txt
,但是由于某种原因,文本字符串总是以空结尾。我检查了文件并填充了文本,但text2
为空。怎么了?
答案 0 :(得分:2)
将字符串附加到fstream
时,输入/输出位置设置为文件的末尾。这意味着当您下次从文件中读取内容时,将看到的只是一个空字符串。
您可以使用以下方法检查当前输入位置:
file.tellg()
并使用以下命令将输入/输出位置设置为开始:
file.seekg(0)
std::fstream
的完整参考是here。
答案 1 :(得分:1)
您正在尝试从文件末尾读取。该位置设置为您最后写入文件的末尾,因此,如果您想阅读所写内容,则必须将其重置:
file.seekg(0);
这会将输入的位置设置回文件的开头。但是请注意,以这种方式从文件中读取将仅使您得到1个单词(直到第一个空格)。如果您想阅读全部内容,也许您应该看一下类似的内容:Read whole ASCII file into C++ std::string。