//Remove File/Dir
MUTILS_API bool remove_file(const QString &fileName);
- MUTILS_API bool remove_directory(const QString &folderPath);
+ MUTILS_API bool remove_directory(const QString &folderPath, const bool &recursive);
//String sorting
MUTILS_API void natural_string_sort(QStringList &list, const bool bIgnoreCase);
//CLI Arguments
MUTILS_API const QStringList &arguments(void);
+ //Copy file
+ MUTILS_API bool copy_file(const QString &sourcePath, const QString &outputPath, const bool &overwrite = true);
+
//Get the OS version
MUTILS_API const Version::os_version_t &os_version(void);
MUTILS_API const char *os_friendly_name(const MUtils::OS::Version::os_version_t &os_version);
bool okay = false;
if(!m_lockFile.isNull())
{
- for(int i = 0; i < 8; i++)
+ for(int i = 0; i < 16; i++)
{
if(m_lockFile->remove())
{
break;
}
- OS::sleep_ms(1);
+ OS::sleep_ms(125);
}
+ m_lockFile.reset(NULL);
}
- for(int i = 0; i < 8; i++)
+ for(int i = 0; i < 16; i++)
{
- if(MUtils::remove_directory(m_dirPath))
+ if(MUtils::remove_directory(m_dirPath, true))
{
okay = true;
break;
}
- OS::sleep_ms(1);
+ OS::sleep_ms(125);
}
if(!okay)
{
{
QFile file(fileName);
file.setPermissions(QFile::ReadOther | QFile::WriteOther);
- if(file.remove())
+ if((!(fileInfo.exists() && fileInfo.isFile())) || file.remove())
{
return true;
}
+ fileInfo.refresh();
}
qWarning("Could not delete \"%s\"", MUTILS_UTF8(fileName));
return false;
}
-bool MUtils::remove_directory(const QString &folderPath)
+static bool remove_directory_helper(QDir folder)
+{
+ if(!folder.exists())
+ {
+ return true;
+ }
+
+ const QString dirName = folder.dirName();
+ if(dirName.isEmpty() || (!folder.cdUp()))
+ {
+ return false;
+ }
+
+ return folder.rmdir(dirName);
+}
+
+bool MUtils::remove_directory(const QString &folderPath, const bool &recursive)
{
QDir folder(folderPath);
if(!folder.exists())
return true;
}
- const QFileInfoList entryList = folder.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
- for(int i = 0; i < entryList.count(); i++)
+ if(recursive)
{
- if(entryList.at(i).isDir())
+ const QFileInfoList entryList = folder.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
+ for(QFileInfoList::ConstIterator iter = entryList.constBegin(); iter != entryList.constEnd(); iter++)
{
- remove_directory(entryList.at(i).canonicalFilePath());
- }
- else
- {
- remove_file(entryList.at(i).canonicalFilePath());
+ if(iter->isDir())
+ {
+ remove_directory(iter->canonicalFilePath(), true);
+ }
+ else if(iter->isFile())
+ {
+ remove_file(iter->canonicalFilePath());
+ }
}
}
for(int i = 0; i < 32; i++)
{
- if(folder.rmdir("."))
+ if(!folder.exists())
{
return true;
}
+ const QString dirName = folder.dirName();
+ if(!dirName.isEmpty())
+ {
+ QDir parent(folder);
+ if(parent.cdUp())
+ {
+ if(parent.rmdir(dirName))
+ {
+ return true;
+ }
+ }
+ }
+ folder.refresh();
}
qWarning("Could not rmdir \"%s\"", MUTILS_UTF8(folderPath));
}
///////////////////////////////////////////////////////////////////////////////
+// COPY FILE
+///////////////////////////////////////////////////////////////////////////////
+
+MUTILS_API bool MUtils::OS::copy_file(const QString &sourcePath, const QString &outputPath, const bool &overwrite)
+{
+ const BOOL result = CopyFileW(MUTILS_WCHR(QDir::toNativeSeparators(sourcePath)), MUTILS_WCHR(QDir::toNativeSeparators(outputPath)), overwrite ? FALSE : TRUE);
+
+ if(result == FALSE)
+ {
+ const DWORD errorCode = GetLastError();
+ qWarning("CopyFile() failed with error code 0x%08X!", errorCode);
+ }
+
+ return (result != FALSE);
+}
+
+///////////////////////////////////////////////////////////////////////////////
// OS VERSION DETECTION
///////////////////////////////////////////////////////////////////////////////