使用QTextStream C ++读取txt文件

时间:2013-02-27 15:13:43

标签: c++ qt

我正在制作一个我以前在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文件。

3 个答案:

答案 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循环获得输出吗?