首页 > 解决方案 > Qt C++:QFile 不会在 WriteOnly 中打开 *.txt 资源

问题描述

我正在尝试从 .txt 文件中读取一行,然后将该行写回另一个 .txt。但是,我只能以只读模式打开文件。当我尝试写回第二个资源 .txt 时,它不会打开。

在我的项目中,我添加了一个资源文件并将两个文件“Test.txt”和“Ergebnis.txt”添加到资源文件中,现在看起来像这样:

<RCC>
<qresource prefix="/stuff">
    <file>Test.txt</file>
    <file>Ergebnis.txt</file>
</qresource>
<qresource prefix="/things"/>

实际的读/写是在单独的函数中完成的,它们的调用方式如下:

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
QString mLine1 = "Success";

mLine = Read(":/stuff/Test.txt");
Write(":/stuff/Ergebnis.txt", mLine1);

}

看起来像这样:

QString Dialog::Read(QString filename){
QFile mNewFile(filename);
QString* mText = new QString;
bool check = true;

if(!mNewFile.open(QFile::ReadOnly | QFile::Text)){
            return *mText = "";
}

QTextStream in(&mNewFile);
check = in.readLineInto(mText);

mNewFile.close();

return *mText;
}

void Dialog::Write(QString out, QString Text){
QFile mNewFile(out);
QString errMsg;
QFileDevice::FileError err = QFileDevice::NoError;

if(mNewFile.exists())
    qDebug() << "Ergebnis.txt exists!";

if(!mNewFile.open(QFile::WriteOnly | QFile::Text )){
        errMsg = mNewFile.errorString();
        err = mNewFile.error();
    qDebug() << "Error: " << errMsg <<"Number: " << err;
    return;
}

QTextStream out_str(&mNewFile);
out_str << Text;
mNewFile.flush();
mNewFile.close();
}

阅读工作得很好,所以我相信资源的路径是正确的。在 Write() 函数中,我还检查了文件是否存在,它确实存在。我尝试在 ReadOnly 中打开文件,它也可以。问题似乎是我无法以 WriteOnly 或 ReadWrite 模式打开文件。errMsg 将“未知错误”输出到命令行。错误代码是“5”,不管这意味着什么......

我还尝试使用以下方法直接从我的文件系统打开文件:

Write("/home/js/Dokumente/Cpp/Programme/QT/TestStringSource/Ergebnis.txt", mLine1);

效果很好,很有趣。

任何意见是极大的赞赏!

标签: c++qtresourcesread-writewriteonly

解决方案


推荐阅读