diff --git a/SabreTools.Helper/Dats/Partials/DatFile.DFD.cs b/SabreTools.Helper/Dats/Partials/DatFile.DFD.cs index b8eb9d6b..691ee588 100644 --- a/SabreTools.Helper/Dats/Partials/DatFile.DFD.cs +++ b/SabreTools.Helper/Dats/Partials/DatFile.DFD.cs @@ -149,16 +149,9 @@ namespace SabreTools.Helper.Dats // Now that we're done, delete the temp folder (if it's not the default) Globals.Logger.User("Cleaning temp folder"); - try + if (tempDir != Path.GetTempPath()) { - if (tempDir != Path.GetTempPath()) - { - Directory.Delete(tempDir, true); - } - } - catch - { - // Just absorb the error for now + FileTools.SafeTryDeleteDirectory(tempDir); } return true; @@ -333,18 +326,11 @@ namespace SabreTools.Helper.Dats // Cue to delete the file if it's a copy if (copyFiles && item != newItem) { - try - { - Directory.Delete(newBasePath, true); - } - catch { } + FileTools.SafeTryDeleteDirectory(newBasePath); } // Delete the sub temp directory - if (Directory.Exists(tempSubDir)) - { - Directory.Delete(tempSubDir, true); - } + FileTools.SafeTryDeleteDirectory(tempSubDir); } /// diff --git a/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs b/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs index 7cf7a4ec..9445536b 100644 --- a/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs +++ b/SabreTools.Helper/Dats/Partials/DatFile.Rebuild.cs @@ -447,7 +447,7 @@ namespace SabreTools.Helper.Dats try { Globals.Logger.Verbose("Attempting to delete input file '" + file + "'"); - File.Delete(file); + FileTools.SafeTryDeleteFile(file, true); Globals.Logger.Verbose("File '" + file + "' deleted"); } catch (Exception ex) @@ -457,11 +457,7 @@ namespace SabreTools.Helper.Dats } // Now delete the temp directory - try - { - Directory.Delete(tempSubDir, true); - } - catch { } + FileTools.SafeTryDeleteDirectory(tempSubDir); } /// @@ -768,11 +764,7 @@ namespace SabreTools.Helper.Dats // And now clear the temp folder to get rid of any transient files if we unzipped if (isZip) { - try - { - Directory.Delete(tempDir, true); - } - catch { } + FileTools.SafeTryDeleteDirectory(tempDir); } return rebuilt; diff --git a/SabreTools.Helper/External/SupportedFiles/ZipFile.cs b/SabreTools.Helper/External/SupportedFiles/ZipFile.cs index 8628107b..e73800f9 100644 --- a/SabreTools.Helper/External/SupportedFiles/ZipFile.cs +++ b/SabreTools.Helper/External/SupportedFiles/ZipFile.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using SabreTools.Helper.Data; +using SabreTools.Helper.Tools; #if MONO using System.IO; @@ -758,7 +759,7 @@ namespace ROMVault2.SupportedFiles.Zip _zipstream.Dispose(); // Delete the failed file - File.Delete(_zipFileInfo.FullName); + FileTools.SafeTryDeleteFile(_zipFileInfo.FullName); _zipFileInfo = null; _zipOpen = ZipOpenType.Closed; } diff --git a/SabreTools.Helper/Skippers/SkipperRule.cs b/SabreTools.Helper/Skippers/SkipperRule.cs index 8274aa33..ea4e1362 100644 --- a/SabreTools.Helper/Skippers/SkipperRule.cs +++ b/SabreTools.Helper/Skippers/SkipperRule.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SabreTools.Helper.Data; +using SabreTools.Helper.Tools; #if MONO using System.IO; @@ -58,15 +59,8 @@ namespace SabreTools.Helper.Skippers // If the output file has size 0, delete it if (new FileInfo(output).Length == 0) { - try - { - File.Delete(output); - success = false; - } - catch - { - // Don't log this file deletion error - } + FileTools.SafeTryDeleteFile(output); + success = false; } return success; diff --git a/SabreTools.Helper/Tools/ArchiveTools.cs b/SabreTools.Helper/Tools/ArchiveTools.cs index 8c7780ff..12bd47a1 100644 --- a/SabreTools.Helper/Tools/ArchiveTools.cs +++ b/SabreTools.Helper/Tools/ArchiveTools.cs @@ -1290,7 +1290,7 @@ namespace SabreTools.Helper.Tools // If the old file exists, delete it and replace if (File.Exists(archiveFileName)) { - File.Delete(archiveFileName); + FileTools.SafeTryDeleteFile(archiveFileName); } File.Move(tempFile, archiveFileName); @@ -1402,11 +1402,7 @@ namespace SabreTools.Helper.Tools } FileTools.CleanDirectory(tempPath); - try - { - Directory.Delete(tempPath); - } - catch { } + FileTools.SafeTryDeleteDirectory(tempPath); } // Otherwise, sort the input files and write out in the correct order @@ -1474,11 +1470,7 @@ namespace SabreTools.Helper.Tools zipFile.CompressFiles(zipFileStream, inputFiles[index]); oldZipFileEntryStream.Dispose(); - try - { - File.Delete(inputFiles[index]); - } - catch { } + FileTools.SafeTryDeleteFile(inputFiles[index]); } } @@ -1497,7 +1489,7 @@ namespace SabreTools.Helper.Tools // If the old file exists, delete it and replace if (File.Exists(archiveFileName)) { - File.Delete(archiveFileName); + FileTools.SafeTryDeleteFile(archiveFileName); } File.Move(tempFile, archiveFileName); @@ -1785,11 +1777,7 @@ namespace SabreTools.Helper.Tools } FileTools.CleanDirectory(tempPath); - try - { - Directory.Delete(tempPath); - } - catch { } + FileTools.SafeTryDeleteDirectory(tempPath); } // Otherwise, sort the input files and write out in the correct order @@ -1857,11 +1845,7 @@ namespace SabreTools.Helper.Tools zipFile.CompressFiles(zipFileStream, inputFiles[index]); oldZipFileEntryStream.Dispose(); - try - { - File.Delete(inputFiles[index]); - } - catch { } + FileTools.SafeTryDeleteFile(inputFiles[index]); } } @@ -1880,7 +1864,7 @@ namespace SabreTools.Helper.Tools // If the old file exists, delete it and replace if (File.Exists(archiveFileName)) { - File.Delete(archiveFileName); + FileTools.SafeTryDeleteFile(archiveFileName); } File.Move(tempFile, archiveFileName); @@ -2146,7 +2130,7 @@ namespace SabreTools.Helper.Tools // If the old file exists, delete it and replace if (File.Exists(archiveFileName)) { - File.Delete(archiveFileName); + FileTools.SafeTryDeleteFile(archiveFileName); } File.Move(tempFile, archiveFileName); diff --git a/SabreTools.Helper/Tools/FileTools.cs b/SabreTools.Helper/Tools/FileTools.cs index f9f64fe6..a86d2b59 100644 --- a/SabreTools.Helper/Tools/FileTools.cs +++ b/SabreTools.Helper/Tools/FileTools.cs @@ -336,19 +336,11 @@ namespace SabreTools.Helper.Tools { foreach (string file in Directory.EnumerateFiles(dirname, "*", SearchOption.TopDirectoryOnly)) { - try - { - File.Delete(file); - } - catch { } + SafeTryDeleteFile(file); } foreach (string dir in Directory.EnumerateDirectories(dirname, "*", SearchOption.TopDirectoryOnly)) { - try - { - Directory.Delete(dir, true); - } - catch { } + SafeTryDeleteDirectory(dir); } } @@ -528,6 +520,72 @@ namespace SabreTools.Helper.Tools return true; } + /// + /// Try to safely delete a directory, optionally throwing the error + /// + /// Name of the directory to delete + /// True if the error that is thrown should be thrown back to the caller, false otherwise + /// True if the file didn't exist or could be deleted, false otherwise + public static bool SafeTryDeleteDirectory(string file, bool throwOnError = false) + { + // Check if the file exists first + if (!Directory.Exists(file)) + { + return true; + } + + // Now wrap deleting the file + try + { + Directory.Delete(file, true); + return true; + } + catch (Exception ex) + { + if (throwOnError) + { + throw ex; + } + else + { + return false; + } + } + } + + /// + /// Try to safely delete a file, optionally throwing the error + /// + /// Name of the file to delete + /// True if the error that is thrown should be thrown back to the caller, false otherwise + /// True if the file didn't exist or could be deleted, false otherwise + public static bool SafeTryDeleteFile(string file, bool throwOnError = false) + { + // Check if the file exists first + if (!File.Exists(file)) + { + return true; + } + + // Now wrap deleting the file + try + { + File.Delete(file); + return true; + } + catch (Exception ex) + { + if (throwOnError) + { + throw ex; + } + else + { + return false; + } + } + } + #endregion #region Stream Information