Updated the remove_directory() function to clear the directory attributes before trying to delete the directory. It turns out that, on the Windows platform, directories *can* be read-only - despite the fact that the Windows Explorer can NOT set (or clear) the "read-only" flag for directories and despite the fact that Windows Explorer seems to totally ignore the "read-only" fag when it has been set somehow.
This commit is contained in:
parent
c3a7afa509
commit
2f66f6b662
@ -240,6 +240,8 @@ const QString &MUtils::temp_folder(void)
|
|||||||
// REMOVE DIRECTORY / FILE
|
// REMOVE DIRECTORY / FILE
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static const QFile::Permissions FILE_PERMISSIONS_NONE = QFile::ReadOther | QFile::WriteOther;
|
||||||
|
|
||||||
bool MUtils::remove_file(const QString &fileName)
|
bool MUtils::remove_file(const QString &fileName)
|
||||||
{
|
{
|
||||||
QFileInfo fileInfo(fileName);
|
QFileInfo fileInfo(fileName);
|
||||||
@ -251,7 +253,7 @@ bool MUtils::remove_file(const QString &fileName)
|
|||||||
for(int i = 0; i < 32; i++)
|
for(int i = 0; i < 32; i++)
|
||||||
{
|
{
|
||||||
QFile file(fileName);
|
QFile file(fileName);
|
||||||
file.setPermissions(QFile::ReadOther | QFile::WriteOther);
|
file.setPermissions(FILE_PERMISSIONS_NONE);
|
||||||
if((!(fileInfo.exists() && fileInfo.isFile())) || file.remove())
|
if((!(fileInfo.exists() && fileInfo.isFile())) || file.remove())
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -263,20 +265,26 @@ bool MUtils::remove_file(const QString &fileName)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool remove_directory_helper(QDir folder)
|
static bool remove_directory_helper(const QDir &folder)
|
||||||
{
|
{
|
||||||
if(!folder.exists())
|
if(!folder.exists())
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString dirName = folder.dirName();
|
const QString dirName = folder.dirName();
|
||||||
if(dirName.isEmpty() || (!folder.cdUp()))
|
if(!dirName.isEmpty())
|
||||||
{
|
{
|
||||||
return false;
|
QDir parent(folder);
|
||||||
|
if(parent.cdUp())
|
||||||
|
{
|
||||||
|
QFile::setPermissions(folder.absolutePath(), FILE_PERMISSIONS_NONE);
|
||||||
|
if(parent.rmdir(dirName))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
return folder.rmdir(dirName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MUtils::remove_directory(const QString &folderPath, const bool &recursive)
|
bool MUtils::remove_directory(const QString &folderPath, const bool &recursive)
|
||||||
@ -305,22 +313,10 @@ bool MUtils::remove_directory(const QString &folderPath, const bool &recursive)
|
|||||||
|
|
||||||
for(int i = 0; i < 32; i++)
|
for(int i = 0; i < 32; i++)
|
||||||
{
|
{
|
||||||
if(!folder.exists())
|
if(remove_directory_helper(folder))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
const QString dirName = folder.dirName();
|
|
||||||
if(!dirName.isEmpty())
|
|
||||||
{
|
|
||||||
QDir parent(folder);
|
|
||||||
if(parent.cdUp())
|
|
||||||
{
|
|
||||||
if(parent.rmdir(dirName))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
folder.refresh();
|
folder.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user