我必须承认,我从未亲自尝试过.
但是,我记得在文件I/O中防止竞争条件的通常方法是分别尝试处理可能的错误情况.
因此,我查看QFile::open()了它提供的内容并找到了:
如果要打开的文件已存在,则失败.仅当文件不存在时才创建并打开该文件.操作系统保证您是唯一创建和打开文件的人.请注意,此模式表示WriteOnly,并允许将其与ReadWrite组合.此标志目前仅影响QFile.其他类可能在将来使用此标志,但在此之前将此标志与QFile以外的任何类一起使用可能会导致未定义的行为.(自Qt 5.11起)
我刚刚意识到(除了我们高效的Qt 5.9安装之外)我还有一个更新的用于私人摆弄的新设置.
因此,我做了一个小样本来检查这个:
#include <QtWidgets>
int main()
{
qDebug() << "Qt Version:" << QT_VERSION_STR;
for (int i = 1; i <= 2; ++i) {
qDebug() << "Iteration" << i;
QFile qFile("test.txt");
if (!qFile.open(QIODevice::WriteOnly | QIODevice::NewOnly)) {
qDebug() << "qFile.open failed! Error code" << qFile.error();
}
qFile.write("test");
qFile.close();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Qt Version: 5.11.2
Iteration 1
Iteration 2
qFile.open failed! Error code 5
QIODevice::write (QFile, "test.txt"): device not open
Run Code Online (Sandbox Code Playgroud)
我仍然不太确定如何找出它由于已经存在的文件而完全失败(并且不是出于任何其他原因).在我的情况下肯定但总的来说?
(错误代码5很简单QFileDevice::OpenError.)
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |