From 355c99c03406703bcd19a9c4102c8ae00d578c47 Mon Sep 17 00:00:00 2001 From: VaDiM Date: Mon, 1 Sep 2025 22:19:48 +0300 Subject: [PATCH] [CLI] Fix deleting of temp files --- AssetStudio/BundleFile.cs | 2 +- AssetStudio/TempFileStream.cs | 40 +++++++++++++++++++++++++++++++++++ AssetStudioCLI/Program.cs | 1 + AssetStudioCLI/Studio.cs | 6 ++++++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 AssetStudio/TempFileStream.cs diff --git a/AssetStudio/BundleFile.cs b/AssetStudio/BundleFile.cs index bb67845..428c207 100644 --- a/AssetStudio/BundleFile.cs +++ b/AssetStudio/BundleFile.cs @@ -196,7 +196,7 @@ namespace AssetStudio var hash = path.GetHashCode(); path = Path.Combine(tempDir, $"{filename}_{hash:X}"); } - return new FileStream(path + ".temp", FileMode.Create, FileAccess.ReadWrite, FileShare.Read, 4096, FileOptions.DeleteOnClose); + return new TempFileStream(path + ".temp", FileMode.Create); } private Stream ReadBlocksAndDirectory(FileReader reader) diff --git a/AssetStudio/TempFileStream.cs b/AssetStudio/TempFileStream.cs new file mode 100644 index 0000000..f288f38 --- /dev/null +++ b/AssetStudio/TempFileStream.cs @@ -0,0 +1,40 @@ +using System.IO; +using System.Runtime.InteropServices; + +namespace AssetStudio +{ + public class TempFileStream : FileStream + { + private readonly string _tempFilePath; + private bool _disposed; + + public TempFileStream(string path, FileMode fileMode, FileAccess fileAccess = FileAccess.ReadWrite, FileShare fileShare = FileShare.Read, int bufferSize = 4096) + : base(path, fileMode, fileAccess, fileShare, bufferSize, FileOptions.DeleteOnClose) + { + _tempFilePath = path; + } + + public override void Close() + { + Dispose(true); + } + + protected override void Dispose(bool disposing) + { + if (_disposed) + return; + + base.Dispose(disposing); + + if (disposing) + { + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && File.Exists(_tempFilePath)) + { + File.Delete(_tempFilePath); + } + + _disposed = true; + } + } + } +} diff --git a/AssetStudioCLI/Program.cs b/AssetStudioCLI/Program.cs index c76515f..8dedbf8 100644 --- a/AssetStudioCLI/Program.cs +++ b/AssetStudioCLI/Program.cs @@ -73,6 +73,7 @@ namespace AssetStudioCLI } finally { + Studio.Clear(); cliLogger.LogToFile(LoggerEvent.Verbose, "---Program ended---"); } } diff --git a/AssetStudioCLI/Studio.cs b/AssetStudioCLI/Studio.cs index 6bb8831..2d13002 100644 --- a/AssetStudioCLI/Studio.cs +++ b/AssetStudioCLI/Studio.cs @@ -1303,5 +1303,11 @@ namespace AssetStudioCLI "Nothing exported."; Logger.Default.Log(LoggerEvent.Info, status, ignoreLevel: true); } + + public static void Clear() + { + assetsManager.Clear(); + assemblyLoader.Clear(); + } } }