【问题标题】:What does "file.open(QIODevice::ReadOnly)" mean?“file.open(QIODevice::ReadOnly)”是什么意思?
【发布时间】:2013-01-27 02:59:07
【问题描述】:

我是 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
} 

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

【问题讨论】:

    标签: qt readonly writeonly qiodevice


    【解决方案1】:

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

    但是,这有什么关系呢?

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

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

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

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

    【讨论】:

    • 感谢您的回复。所以我假设 qt 有必要包含这个检查以符合规则。对吗?
    • @Vijay 好吧,检查本身并不是必需的,但是尝试使用 Qt 应用程序编写文件,而不进行检查,同时在 Excel 中打开相同的文件,例如 - 您的程序将首先崩溃写。
    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    • 1970-01-01
    • 2013-03-09
    相关资源
    最近更新 更多