簡體   English   中英

使用QTextStream C ++讀取txt文件

[英]Reading a txt file using QTextStream C++

我正在編寫一個以前用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(最有可能)以所需的格式將它們連接在一起,然后將它們寫入第3個txt文件。

如果要整個文件,為什么要逐行閱讀?

QString line = in.readAll();

同樣,您的while循環是錯誤的,您需要對文本流使用while (!in.atEnd()) ,而不是檢查字符串是否為null。

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

如果文件名不包含完整路徑,但是您非常確定文件與應用程序位於同一目錄中,請使用以下應用程序路徑:

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

試試這個塊-:

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

你使用while循環獲得輸出嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM