如何重复使用QFile?

4
我想使用以下代码将两个文件保存到目录中:
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),QDesktopServices::storageLocation(QDesktopServices::DesktopLocation),
                                         QFileDialog::ShowDirsOnly
                                         | QFileDialog::DontResolveSymlinks);
QFile file(dir.append("/GlobalMessage.txt"));
if(file.open(QIODevice::WriteOnly | QIODevice::Text)){
    QTextStream out(&file);

    for (int i=0;i<t_global.size();i++){
        out << t_global[i]<<" "<<y_lat.y[i]<<" "<<y_lng.y[i]<<" "<<y_alt.y[i]<<" "<<y_vx.y[i]<<" "<<y_vy.y[i]<<" "<<y_vz.y[i]<<"\n";
    }
}
// optional, as QFile destructor will already do it:
file.close(); 

file.setFileName(dir.append("/AttitudeMessage.txt"));
if(file.open(QIODevice::WriteOnly | QIODevice::Text)){
    QTextStream out(&file);

    for (int i=0;i<t_attitude.size();i++){
        out << t_attitude[i]<<" "<<y_roll.y[i]<<" "<<y_pitch.y[i]<<" "<<y_yaw.y[i]<<"\n";
    }
}
file.close();

第二个 file.open() 总是失败。如何正确地重用这个文件对象?

我很好奇,你希望从这里获得什么? - dtech
打开一个目录并保存两个文件。 - Nyaruko
我指的是重复使用相同的 QFile 实例。 - dtech
没有什么特别的。我只是认为这可能会起作用,但事实并非如此。所以我想知道我哪里出错了。 - Nyaruko
你没有费心去检查路径,是吧 :) - dtech
2个回答

4

append 函数会改变底层的 QString

这是你的程序中 file.filename() 的输出结果:

"/tmp/GlobalMessage.txt"
"/tmp/GlobalMessage.txt/AttitudeMessage.txt"

只需使用

QFile file(dir + "/GlobalMessage.txt");

并且

file.setFileName(dir + "/AttitudeMessage.txt");

2

这可能是由于您生成的路径有问题,因为这段代码在我的电脑上可以正常工作:

QFile file("d:\\a.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    qDebug() << file.readAll();

    file.close();

    file.setFileName("d:\\b.txt");
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << file.readAll();
    }
}

编辑:是的,Simon先看到了,但是添加的内容太多了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接