2

我是 Qt 的新手,我在它的入门页面上学习。我想知道以下语句是什么意思,为什么需要它们?

在打开功能中:

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

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

    return;
}

同样在保存功能中:

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

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

4

1 回答 1

3

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

但是,这有什么关系呢?

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

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

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

最后一段描述了所谓的多阅读器-单作者技术,因此您可能需要在 Internet 或并发课程教科书中查找它。

于 2013-02-11T22:51:16.613 回答