700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 如何用c语言强制删除文件夹 c++ - 使用C ++在Windows上强制删除文件 - 堆栈内存溢出...

如何用c语言强制删除文件夹 c++ - 使用C ++在Windows上强制删除文件 - 堆栈内存溢出...

时间:2020-09-09 15:51:58

相关推荐

如何用c语言强制删除文件夹 c++ - 使用C ++在Windows上强制删除文件 - 堆栈内存溢出...

我从C ++ / Qt应用程序删除文件时遇到一些麻烦。 当用户删除什么工作会话时,应从磁盘中删除所选的工作会话目录。

但有时,删除失败可能是由于锁定(在另一个应用程序中打开了目录中的文件)。

但是,由于工作会话存储在网络驱动器上(在Linux服务器上,在Windows驱动器号上使用samba挂载),因此我怀疑还有与网络相关的锁。

为了避免出现问题,我使用了一个小循环来删除文件:

QFile::remove(absoluteFileName);

bool result = (QFile::exists(absoluteFileName) == false);

// The file system may need some time to react, wait 100ms * 50 = 5 s for operation to complete

for (int i=0; (i<50)&&(result==false); i++)

{

QThread::msleep(100);

result = (QFile::exists(absoluteFileName) == false);

}

if (result == false)

{

qCCritical(c3x::Log::General()) << "Unable to delete file : " << absoluteFileName;

return false;

}

这样,如果文件删除失败,我将每100ms重试一次。 这解决了大约90%的文件删除问题。

但是我仍然有麻烦:即使当前没有打开任何文件,我的程序也无法删除该目录。

使用“ Unlocker”工具,我可以看到Windows File Explorer在目录本身上具有锁定。

那么,有没有可以用来强制删除的Win​​dows API调用?

还有其他方法可以防止文件删除错误吗? 也许在samba服务器配置中?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。