“file.open(QIODevice :: ReadOnly)”是什么意思?

时间:2013-02-11 22:06:41

标签: qt readonly writeonly qiodevice

我是Qt的新手,我正在学习Getting Started页面。我想知道以下陈述的含义是什么,为什么需要它们?

在开放功能中:

if (!file.open(QIODevice::ReadOnly)) {

    QMessageBox::critical(this, tr("Error"), tr("Could not open file"));

    return;
}

同样在保存功能中:

if (!file.open(QIODevice::WriteOnly)) {
            // error message
} 

如果没有这些行,我无法运行这些功能。我尝试在文档中阅读有关错误处理的内容,但无法准确找到这些语句的含义。

1 个答案:

答案 0 :(得分:3)

您可以打开文件进行阅读和书写。使用QIODevice::WriteOnlyQIODevice::ReadOnly标志,您将指定打开特定文件的模式。

但是,为什么这很重要?

假设您在不同程序的多个实例中打开了一个文件,并且没有指定文件模式。现在,如果每个文件都在读取文件 - 因为它们都有不同的指针指向文件中的当前位置 - 这不是问题 - 因为所有程序都将从文件中获取最新和正确的信息。但是,如果只有一个程序将某些内容写入文件 - 您的数据将不一致,因此其他程序可能会读取错误的数据。

直观的方法是向附加在此文件上的所有程序发送消息,以便他们自行更新。但是 - 如果删除文件该怎么办?或者,如果没有可能在新数据中设置正确的位置?此外,每个程序现在都需要具有接口才能得到通知,并且整个消息传递的想法可能非常慢(除了它不起作用)。

所以 - 简单地达成共识 - 多个程序可以打开文件进行阅读 - 因为它们都具有相同且一致的数据。但是,如果只有一个程序通知操作系统它想获得写权限 - 该文件不能在任何程序中打开 - 也不能用于读取 - 也不能用于写入!根据实现,操作系统可能会阻止调用者,直到所有文件都关闭,或者它可以简单地忽略调用并将错误信息发送给调用者 - 这通常是一个更好的主意,因为程序(或用户)可以阻止自己并稍后再试,或者它可以简单地要求用户保存到另一个目的地,或者它可以向我们发送令人毛骨悚然的错误消息 - 但它将无法写入文件。

最后一段描述了所谓的多读者 - 单一作家技术,因此您可能希望在互联网或并发类教科书上查找。