我正在制作一个我以前在Java中完成的小程序但是我想尝试在C ++中使用相同的程序。想法是合并两个文本文件
文件1:
a
b
c
file2的:
1
2
3
输出文件应为:
a1
b2
c3
我查看了QTextStream文档,这是建议的代码逐行读取文件
QFile file(input); // this is a name of a file text1.txt sent from main method
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
return 1;
}
QTextStream in(&file);
QString line = in.readLine();
while (!line.isNull())
{
line = in.readLine();
}
但由于某些原因,根本没有从文件中加载任何东西。我通过将'line'打印到控制台并且什么都没有来证明这一点。
那么任何想法?我想要的只是阅读文件,最后得到一个像这样的字符串
QString text1 = "a\n2\n3"
我会为这两个文件执行此操作,将字符串拆分为QStringList(最有可能)以我想要的格式将它们连接在一起并将它们写入第3个txt文件。
答案 0 :(得分:6)
如果你想要整个文件,为什么要逐行阅读?
QString line = in.readAll();
另外,你的while循环错误,你需要while (!in.atEnd())
来获取文本流而不是检查字符串是否为空。
readLine
不会包含新的行符号。
无论如何,同时打开这两个文件并在旅途中构建你的字符串会更容易,而不是分裂和加入。
QFile f1("h:/1.txt");
QFile f2("h:/2.txt");
f1.open(QIODevice::ReadOnly | QIODevice::Text);
f2.open(QIODevice::ReadOnly | QIODevice::Text);
QString s;
QTextStream s1(&f1);
QTextStream s2(&f2);
for (int i = 0; i < 3; ++i) {
s.append(s1.readLine());
s.append(s2.readLine());
if (i != 2)s.append("\n");
}
答案 1 :(得分:1)
如果文件名不包含完整路径,但您非常确定该文件与应用程序位于同一目录中,请使用以下应用程序路径:
QString filename = QCoreApplication::applicationDirPath() + "/" + input;
答案 2 :(得分:0)
试试这个块 - :
while(!in.atEnd())
{
QString line = in.readLine();
....
}
你使用while while循环获得输出吗?