使用QTextStream C++; 我正在做一个小程序,以前在java中做过,但是我想尝试C++中的同样的工作。其思想是合并两个文本文件

使用QTextStream C++; 我正在做一个小程序,以前在java中做过,但是我想尝试C++中的同样的工作。其思想是合并两个文本文件,c++,qt,C++,Qt,文件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(&

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

如果需要整个文件,为什么要逐行读取

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");
}
QFile f1(“h:/1.txt”);
QFile f2(“h:/2.txt”);
f1.打开(QIODevice::ReadOnly | QIODevice::Text);
f2.打开(QIODevice::ReadOnly | QIODevice::Text);
QString s;
QTextStream s1(&f1);
QTextStream s2(&f2);
对于(int i=0;i<3;++i){
s、 追加(s1.readLine());
s、 追加(s2.readLine());
如果(i!=2)s.append(“\n”);
}

如果需要整个文件,为什么要逐行阅读

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");
}
QFile f1(“h:/1.txt”);
QFile f2(“h:/2.txt”);
f1.打开(QIODevice::ReadOnly | QIODevice::Text);
f2.打开(QIODevice::ReadOnly | QIODevice::Text);
QString s;
QTextStream s1(&f1);
QTextStream s2(&f2);
对于(int i=0;i<3;++i){
s、 追加(s1.readLine());
s、 追加(s2.readLine());
如果(i!=2)s.append(“\n”);
}
尝试此块-:

while(!in.atEnd())
{
   QString line = in.readLine();   
   ....
}
是否使用此while循环获取输出?

尝试此块-:

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

是否使用此while循环获取输出?

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

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

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

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

多亏了语法纳粹主义者路过而不帮忙是的,我知道@Roku这基本上就是我要问的,它甚至没有读文件,因为所有的'input1'是,是'text1.txt'没有文件路径有什么具体的原因它必须是QTextStream吗?多亏了语法纳粹主义者路过而不帮忙是的,我知道@Roku这基本上就是我要问的,它甚至没有读取文件,因为所有的“input1”都是,是“text1.txt”没有文件路径它必须是QTextStream有什么具体的原因吗?为答案欢呼似乎正是我需要的,但是它仍然没有读取任何内容,txt文件必须在哪里才能被f1读取(“text1.txt”)因为我基本上可以把它放在java中,并从项目文件夹中读取它?好吧,它对我来说很有效,文件在哪里并不重要,我硬编码了它,但只要你传递一个有效的文件路径,它就应该工作。您无法获得输出,可能是因为您没有正确打开文件。你的方法是否返回1?不,我的意思是,我没有输入文件路径,我输入了一个文件名,就像你在java中输入的一样(java会在项目文件夹中查找该名称),我这样做是因为我通过控制台的用户输入获取文件名,这样做行吗?或者我实际上必须指定一个文件路径,因为这看起来很愚蠢,无法只指定一个名称。如果不指定完整的文件路径,文件将从当前目录中读取。这取决于如何运行应用程序。它与C++或java无关。除了while循环,代码看起来还不错,所以你没有得到输出的原因是输入< /C> >不是有效的文件路径和名称。如果文件在您的项目文件夹中,您只需要文件名。为答案干杯似乎正是我所需要的,但它仍然不读取任何内容,txt文件必须在哪里才能由f1(“text1.txt”)读取,因为我基本上可以将其放在java中,并从项目文件夹中读取?嗯,它对我很有用,文件在哪里并不重要,我对其进行了硬编码,但只要您传递文件的有效路径,它就会工作。您无法获得输出,可能是因为您没有正确打开文件。你的方法是否返回1?不,我的意思是,我没有输入文件路径,我输入了一个文件名,就像你在java中输入的一样(java会在项目文件夹中查找该名称),我这样做是因为我通过控制台的用户输入获取文件名,这样做行吗?或者我实际上必须指定一个文件路径,因为这看起来很愚蠢,无法只指定一个名称。如果不指定完整的文件路径,文件将从当前目录中读取。这取决于如何运行应用程序。它与C++或java无关。除了while循环,代码看起来还不错,所以你没有得到输出的原因是输入< /C> >不是有效的文件路径和名称。如果文件位于项目文件夹中,则只需要文件名。