使用QTextStream C++读取txt文件

问题描述:

我正在制作一个我之前在Java中完成的小程序,但是我想尝试使用C++工作。我们的想法是合并两个文本文件使用QTextStream C++读取txt文件

文件1:

a 
b 
c 

文件2:

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(); 
} 

然而由于某种原因,根本没有任何东西从文件加载。我通过打印“行”来证明这一点,但没有任何结果。

那么有什么想法?我想要的是读取文件,并像这样

QString text1 = "a\n2\n3" 

我愿意为这两个文件,一个字符串结束了,分割字符串转换为QStringList中(最有可能)在我想要的格式将它们连接在一起,并将它们写入第三个txt文件。

+1

感谢语法纳粹因为停止和不帮助 – AngryDuck 2013-02-27 15:32:16

+0

是啊我知道@Roku基本上是什么即时通讯问,它甚至没有读取文件,因为所有'输入1'是,'text1.txt'没有文件路径 – AngryDuck 2013-02-27 15:45:31

+0

是否有任何特定的原因,它必须是QTextStream? – 2016-04-08 21:47:20

如果你想要整个文件,为什么你一行一行地阅读?

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"); 
} 
+0

欢呼声的答案似乎正是我所需要的,但它仍然没有读取任何内容,txt文件必须被f1读取(“text1.txt”),因为我可以基本上把它放在java中并让它读取从项目文件夹? – AngryDuck 2013-02-27 15:36:57

+0

嗯,它适用于我,文件的位置并不重要,我对它进行了硬编码,但只要您将有效的路径传递到文件,它就会工作。您没有得到输出可能是因为您没有正确打开文件。你的方法返回1吗? – dtech 2013-02-27 15:39:37

+0

没有我的意思是我没有把文件路径即时通讯把文件名像你可以在Java中(然后在项目文件夹中寻找该名称)即时通讯这样做,因为即时通过用户输入从控制台获取文件名,所以这样做还是我实际上将不得不指定一个文件路径,因为那看起来很愚蠢,没有办法指定一个名字 – AngryDuck 2013-02-27 15:44:15

试试这个块级:

while(!in.atEnd()) 
{ 
    QString line = in.readLine(); 
    .... 
} 

你使用这个while循环得到的输出?

如果文件名不包含完整的路径,但你很确信该文件位于同一目录中的应用程序,使用应用程序的路径是这样的:

QString filename = QCoreApplication::applicationDirPath() + "/" + input;