1

我正在制作一个我以前在 Java 中做过的小程序,但是我想尝试在 C++ 中进行同样的工作。这个想法是合并两个文本文件

文件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 文件。

4

3 回答 3

7

如果您想要整个文件,为什么要逐行阅读?

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");
}
于 2013-02-27T15:31:10.713 回答
1

如果文件名不包含完整路径,但您非常确定该文件与您的应用程序位于同一目录中,请使用如下应用程序路径:

QString filename = QCoreApplication::applicationDirPath() + "/" + input;
于 2013-02-27T15:50:55.097 回答
0

试试这个块-:

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

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

于 2013-02-27T15:31:24.147 回答