QFile无法实现对一个文件进行独占(即只允许本程序本QFIle对象进行操作,其他对象,其他程序都无法对其操作)打开。
测试代码如下:
QString fileName = "../123.txt";
QFile *file = new QFile(fileName);
if(file->open(QFile::Append | QFile::WriteOnly | QFile::Unbuffered))
{
qDebug() << "openned0:" << file->pos();
file->write(QDateTime::currentDateTime().toString("yyyyMMdd hh:mm:ss.zzz").toLatin1() + "\r\n");
qDebug() << "openned1:" << file->pos();
QFile *file2 = new QFile(fileName);
qDebug() << "reopen:" << file2->open(QFile::Append | QFile::WriteOnly | QFile::Unbuffered);
qDebug() << "rename:" << file2->rename("456.txt");
//假如注释掉这一段,你就会发现123.txt里面的内容乱了,一段覆盖一段的。其实也不是乱,只是文件指针反复指向而且。。。
// QTimer *timer = new QTimer();
// timer->setInterval(1000);
// connect(timer, &QTimer::timeout, [=](){
// file->write(QDateTime::currentDateTime().toString("yyyyMMdd hh:mm:ss.zzz").toLatin1() + "\r\n");
// file2->write("dsfdf\r\n");
// });
// timer->start();
}
Qt里面有个QLockFile,但是这玩意不是用来锁文件的,而是一个文件锁。类似线程锁的东西,假如文件不存在,你执行tryLock的时候就会创建一个文件,析构或者unlock的时候就会删除这个文件。
假如要真正实现独占,必须要调用系统api:
HANDLE hFILE = CreateFile(L"../123.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);