Added emptyDirectory()

This commit is contained in:
Daniel Brunner
2018-10-14 12:13:53 +02:00
parent 49b7ffa656
commit b01b04cd5c
3 changed files with 55 additions and 0 deletions
+4
View File
@@ -7,12 +7,14 @@ set(HEADERS
dbcorelib_global.h
fixedsizematrix.h
randomdevice.h
utils/fileutils.h
utils/jsonutils.h
utils/timeutils.h
)
set(SOURCES
randomdevice.cpp
utils/fileutils.cpp
utils/jsonutils.cpp
utils/timeutils.cpp
)
@@ -25,6 +27,8 @@ target_link_libraries(dbcorelib Qt5::Core)
target_include_directories(dbcorelib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
add_dependencies(libs dbcorelib)
add_executable(tst_fixedsizematrix tst_fixedsizematrix.cpp)
add_test(tst_fixedsizematrix tst_fixedsizematrix)
+46
View File
@@ -0,0 +1,46 @@
#include "fileutils.h"
#include <QDir>
#include <QDebug>
#include <QDirIterator>
#include <QFileInfo>
#include <QFile>
bool emptyDirectory(const QString &path)
{
QDir dir(path);
if(!dir.exists())
{
qWarning() << "tried to empty non-existant dir" << path;
return true;
}
bool success = true;
// not empty -- we must empty it first
QDirIterator di(dir.absolutePath(), QDir::AllEntries | QDir::Hidden | QDir::System | QDir::NoDotAndDotDot);
while (di.hasNext()) {
di.next();
const QFileInfo& fi = di.fileInfo();
const QString &filePath = di.filePath();
bool ok;
if (fi.isDir() && !fi.isSymLink()) {
ok = QDir(filePath).removeRecursively(); // recursive
} else {
ok = QFile::remove(filePath);
if (!ok) { // Read-only files prevent directory deletion on Windows, retry with Write permission.
const QFile::Permissions permissions = QFile::permissions(filePath);
if (!(permissions & QFile::WriteUser))
ok = QFile::setPermissions(filePath, permissions | QFile::WriteUser)
&& QFile::remove(filePath);
}
}
if (!ok)
success = false;
}
if(!success)
qWarning() << "could not empty" << path;
return success;
}
+5
View File
@@ -0,0 +1,5 @@
#pragma once
#include "dbcorelib_global.h"
bool DBCORELIB_EXPORT emptyDirectory(const QString &path);