删除⽂件-堆栈内存溢出...
我从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 d ows API调⽤?
还有其他⽅法可以防⽌⽂件删除错误吗? 也许在samba服务器配置中?
发布评论