refactor: use std::filesystem for path deletion
Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
parent
5932f36285
commit
be3fae6511
@ -179,49 +179,15 @@ bool copy::operator()(const QString& offset)
|
|||||||
|
|
||||||
bool deletePath(QString path)
|
bool deletePath(QString path)
|
||||||
{
|
{
|
||||||
bool OK = true;
|
std::error_code err;
|
||||||
QFileInfo finfo(path);
|
|
||||||
if (finfo.isFile()) {
|
std::filesystem::remove_all(path.toStdString(), err);
|
||||||
return QFile::remove(path);
|
|
||||||
|
if (err) {
|
||||||
|
qWarning() << "Failed to remove files:" << QString::fromStdString(err.message());
|
||||||
}
|
}
|
||||||
|
|
||||||
QDir dir(path);
|
return err.value() == 0;
|
||||||
|
|
||||||
if (!dir.exists()) {
|
|
||||||
return OK;
|
|
||||||
}
|
|
||||||
auto allEntries = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst);
|
|
||||||
|
|
||||||
for (auto& info : allEntries) {
|
|
||||||
#if defined Q_OS_WIN32
|
|
||||||
QString nativePath = QDir::toNativeSeparators(info.absoluteFilePath());
|
|
||||||
auto wString = nativePath.toStdWString();
|
|
||||||
DWORD dwAttrs = GetFileAttributesW(wString.c_str());
|
|
||||||
// Windows: check for junctions, reparse points and other nasty things of that sort
|
|
||||||
if (dwAttrs & FILE_ATTRIBUTE_REPARSE_POINT) {
|
|
||||||
if (info.isFile()) {
|
|
||||||
OK &= QFile::remove(info.absoluteFilePath());
|
|
||||||
} else if (info.isDir()) {
|
|
||||||
OK &= dir.rmdir(info.absoluteFilePath());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// We do not trust Qt with reparse points, but do trust it with unix symlinks.
|
|
||||||
if (info.isSymLink()) {
|
|
||||||
OK &= QFile::remove(info.absoluteFilePath());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
else if (info.isDir()) {
|
|
||||||
OK &= deletePath(info.absoluteFilePath());
|
|
||||||
} else if (info.isFile()) {
|
|
||||||
OK &= QFile::remove(info.absoluteFilePath());
|
|
||||||
} else {
|
|
||||||
OK = false;
|
|
||||||
qCritical() << "Delete ERROR: Unknown filesystem object:" << info.absoluteFilePath();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
OK &= dir.rmdir(dir.absolutePath());
|
|
||||||
return OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool trash(QString path, QString *pathInTrash = nullptr)
|
bool trash(QString path, QString *pathInTrash = nullptr)
|
||||||
|
Loading…
Reference in New Issue
Block a user