mirror of https://github.com/PCSX2/pcsx2.git
FileSystem: Add DeleteDirectory() and recursive variant
This commit is contained in:
parent
29c0d93864
commit
47fff9304b
|
@ -575,6 +575,29 @@ bool FileSystem::EnsureDirectoryExists(const char* path, bool recursive)
|
||||||
return FileSystem::CreateDirectoryPath(path, recursive);
|
return FileSystem::CreateDirectoryPath(path, recursive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FileSystem::RecursiveDeleteDirectory(const char* path)
|
||||||
|
{
|
||||||
|
FindResultsArray results;
|
||||||
|
if (FindFiles(path, "*", FILESYSTEM_FIND_FILES | FILESYSTEM_FIND_FOLDERS | FILESYSTEM_FIND_HIDDEN_FILES, &results))
|
||||||
|
{
|
||||||
|
for (const FILESYSTEM_FIND_DATA& fd : results)
|
||||||
|
{
|
||||||
|
if (fd.Attributes & FILESYSTEM_FILE_ATTRIBUTE_DIRECTORY)
|
||||||
|
{
|
||||||
|
if (!RecursiveDeleteDirectory(fd.FileName.c_str()))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!DeleteFilePath(fd.FileName.c_str()))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DeleteDirectory(path);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
static u32 TranslateWin32Attributes(u32 Win32Attributes)
|
static u32 TranslateWin32Attributes(u32 Win32Attributes)
|
||||||
|
@ -1040,15 +1063,15 @@ bool FileSystem::DeleteFilePath(const char* path)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileSystem::RenamePath(const char* old_path, const char* new_patah)
|
bool FileSystem::RenamePath(const char* old_path, const char* new_path)
|
||||||
{
|
{
|
||||||
const std::wstring old_wpath(StringUtil::UTF8StringToWideString(old_path));
|
const std::wstring old_wpath(StringUtil::UTF8StringToWideString(old_path));
|
||||||
const std::wstring new_wpath(StringUtil::UTF8StringToWideString(new_patah));
|
const std::wstring new_wpath(StringUtil::UTF8StringToWideString(new_path));
|
||||||
|
|
||||||
#ifndef _UWP
|
#ifndef _UWP
|
||||||
if (!MoveFileExW(old_wpath.c_str(), new_wpath.c_str(), MOVEFILE_REPLACE_EXISTING))
|
if (!MoveFileExW(old_wpath.c_str(), new_wpath.c_str(), MOVEFILE_REPLACE_EXISTING))
|
||||||
{
|
{
|
||||||
Console.Error("MoveFileEx('%s', '%s') failed: %08X", old_path, new_patah, GetLastError());
|
Console.Error("MoveFileEx('%s', '%s') failed: %08X", old_path, new_path, GetLastError());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -1064,7 +1087,7 @@ bool FileSystem::RenamePath(const char* old_path, const char* new_patah)
|
||||||
|
|
||||||
if (!MoveFileFromAppW(old_wpath.c_str(), new_wpath.c_str()))
|
if (!MoveFileFromAppW(old_wpath.c_str(), new_wpath.c_str()))
|
||||||
{
|
{
|
||||||
Log_ErrorPrintf("MoveFileFromAppW('%s', '%s') failed: %08X", old_path, new_patah, GetLastError());
|
Log_ErrorPrintf("MoveFileFromAppW('%s', '%s') failed: %08X", old_path, new_path, GetLastError());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1072,6 +1095,12 @@ bool FileSystem::RenamePath(const char* old_path, const char* new_patah)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FileSystem::DeleteDirectory(const char* path)
|
||||||
|
{
|
||||||
|
const std::wstring wpath(StringUtil::UTF8StringToWideString(path));
|
||||||
|
return RemoveDirectoryW(wpath.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
std::string FileSystem::GetProgramPath()
|
std::string FileSystem::GetProgramPath()
|
||||||
{
|
{
|
||||||
std::wstring buffer;
|
std::wstring buffer;
|
||||||
|
@ -1485,6 +1514,18 @@ bool FileSystem::RenamePath(const char* old_path, const char* new_path)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FileSystem::DeleteDirectory(const char* path)
|
||||||
|
{
|
||||||
|
if (path[0] == '\0')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
struct stat sysStatData;
|
||||||
|
if (stat(path, &sysStatData) != 0 || !S_ISDIR(sysStatData.st_mode))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return (unlink(path) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
std::string FileSystem::GetProgramPath()
|
std::string FileSystem::GetProgramPath()
|
||||||
{
|
{
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
|
|
|
@ -154,6 +154,12 @@ namespace FileSystem
|
||||||
/// Returns false if it does not exist and creation failed.
|
/// Returns false if it does not exist and creation failed.
|
||||||
bool EnsureDirectoryExists(const char* path, bool recursive);
|
bool EnsureDirectoryExists(const char* path, bool recursive);
|
||||||
|
|
||||||
|
/// Removes a directory.
|
||||||
|
bool DeleteDirectory(const char* path);
|
||||||
|
|
||||||
|
/// Recursively removes a directory and all subdirectories/files.
|
||||||
|
bool RecursiveDeleteDirectory(const char* path);
|
||||||
|
|
||||||
/// Returns the path to the current executable.
|
/// Returns the path to the current executable.
|
||||||
std::string GetProgramPath();
|
std::string GetProgramPath();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue