如何重用 QFile?

Posted

技术标签:

【中文标题】如何重用 QFile?【英文标题】:How to reuse QFile? 【发布时间】:2014-11-14 20:36:23 【问题描述】:

我想使用以下代码将两个文件保存到一个目录:

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() 总是失败。重用这个文件对象的正确方法是什么?

【问题讨论】:

我很好奇您希望从中获得什么? 打开一个目录并保存两个文件。 我的意思是重复使用相同的QFile 实例。 没什么特别的。我只是认为这可以工作,但事实并非如此。所以我想知道我哪里出错了。 你没有费心去检查路径吗 :) 【参考方案1】:

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();
    

编辑:是的,西蒙首先发现了它,你添加的太多了。

【讨论】:

以上是关于如何重用 QFile?的主要内容,如果未能解决你的问题,请参考以下文章

如何使代码可重用? [关闭]

如何使 UIPageViewController 像 tableview 重用单元一样重用控制器?

“前.NET Core时代”如何实现跨平台代码重用 ——程序集重用

如何重用 HttpUrlConnection? [复制]

如何创建和维护代码重用库?

如何重用 PHPUnit 函数