From 4599ff098cc62237db5a0adf0e5d12fcfd64a8be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Fri, 14 Mar 2025 12:27:01 +0800 Subject: [PATCH] update resource package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化ClearCacheFilesAsync方法 --- .../DefaultCacheFileSystem.cs | 16 ++------- .../Elements/RecordFileElement.cs | 32 ++++++++++++++++-- .../ClearCacheBundleFilesByTagsOperaiton.cs | 33 ++++++++++++++----- .../ClearUnusedCacheBundleFilesOperation.cs | 21 ++++++++++-- .../ClearUnusedCacheManifestFilesOperation.cs | 17 +++++++++- .../ResourcePackage/ResourcePackage.cs | 4 +-- 6 files changed, 92 insertions(+), 31 deletions(-) diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs index d8ccb6d4..6e1ce5e0 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs @@ -429,20 +429,8 @@ namespace YooAsset { if (_records.TryGetValue(bundleGUID, out RecordFileElement wrapper)) { - try - { - string dataFilePath = wrapper.DataFilePath; - FileInfo fileInfo = new FileInfo(dataFilePath); - if (fileInfo.Exists) - fileInfo.Directory.Delete(true); - _records.Remove(bundleGUID); - return true; - } - catch (Exception e) - { - YooLogger.Error($"Failed to delete cache file ! {e.Message}"); - return false; - } + _records.Remove(bundleGUID); + return wrapper.DeleteFolder(); } else { diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Elements/RecordFileElement.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Elements/RecordFileElement.cs index d44cbd41..6331b1e2 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Elements/RecordFileElement.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Elements/RecordFileElement.cs @@ -1,4 +1,6 @@ - +using System; +using System.IO; + namespace YooAsset { internal class RecordFileElement @@ -7,7 +9,7 @@ namespace YooAsset public string DataFilePath { private set; get; } public string DataFileCRC { private set; get; } public long DataFileSize { private set; get; } - + public RecordFileElement(string infoFilePath, string dataFilePath, string dataFileCRC, long dataFileSize) { InfoFilePath = infoFilePath; @@ -15,5 +17,31 @@ namespace YooAsset DataFileCRC = dataFileCRC; DataFileSize = dataFileSize; } + + /// + /// 删除记录文件 + /// + public bool DeleteFolder() + { + try + { + string directory = Path.GetDirectoryName(InfoFilePath); + DirectoryInfo directoryInfo = new DirectoryInfo(directory); + if (directoryInfo.Exists) + { + directoryInfo.Delete(true); + return true; + } + else + { + return false; + } + } + catch (Exception e) + { + YooLogger.Error($"Failed to delete cache file ! {e.Message}"); + return false; + } + } } } \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearCacheBundleFilesByTagsOperaiton.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearCacheBundleFilesByTagsOperaiton.cs index b913af3c..eef4797a 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearCacheBundleFilesByTagsOperaiton.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearCacheBundleFilesByTagsOperaiton.cs @@ -7,9 +7,10 @@ namespace YooAsset private enum ESteps { None, + CheckManifest, CheckArgs, - GetTagsCacheFiles, - ClearTagsCacheFiles, + GetClearCacheFiles, + ClearFilterCacheFiles, Done, } @@ -29,13 +30,27 @@ namespace YooAsset } internal override void InternalStart() { - _steps = ESteps.CheckArgs; + _steps = ESteps.CheckManifest; } internal override void InternalUpdate() { if (_steps == ESteps.None || _steps == ESteps.Done) return; + if (_steps == ESteps.CheckManifest) + { + if (_manifest == null) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = "Can not found active package manifest !"; + } + else + { + _steps = ESteps.CheckArgs; + } + } + if (_steps == ESteps.CheckArgs) { if (_clearParam == null) @@ -67,17 +82,17 @@ namespace YooAsset return; } - _steps = ESteps.GetTagsCacheFiles; + _steps = ESteps.GetClearCacheFiles; } - if (_steps == ESteps.GetTagsCacheFiles) + if (_steps == ESteps.GetClearCacheFiles) { - _clearBundleGUIDs = GetTagsBundleGUIDs(); + _clearBundleGUIDs = GetBundleGUIDsByTag(); _clearFileTotalCount = _clearBundleGUIDs.Count; - _steps = ESteps.ClearTagsCacheFiles; + _steps = ESteps.ClearFilterCacheFiles; } - if (_steps == ESteps.ClearTagsCacheFiles) + if (_steps == ESteps.ClearFilterCacheFiles) { for (int i = _clearBundleGUIDs.Count - 1; i >= 0; i--) { @@ -100,7 +115,7 @@ namespace YooAsset } } } - private List GetTagsBundleGUIDs() + private List GetBundleGUIDsByTag() { var allBundleGUIDs = _fileSystem.GetAllCachedBundleGUIDs(); List result = new List(allBundleGUIDs.Count); diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearUnusedCacheBundleFilesOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearUnusedCacheBundleFilesOperation.cs index a09baf94..63841e14 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearUnusedCacheBundleFilesOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearUnusedCacheBundleFilesOperation.cs @@ -8,6 +8,7 @@ namespace YooAsset private enum ESteps { None, + CheckManifest, GetUnusedCacheFiles, ClearUnusedCacheFiles, Done, @@ -19,7 +20,7 @@ namespace YooAsset private int _unusedFileTotalCount = 0; private ESteps _steps = ESteps.None; - + internal ClearUnusedCacheBundleFilesOperation(DefaultCacheFileSystem fileSystem, PackageManifest manifest) { _fileSystem = fileSystem; @@ -27,15 +28,29 @@ namespace YooAsset } internal override void InternalStart() { - _steps = ESteps.GetUnusedCacheFiles; + _steps = ESteps.CheckManifest; } internal override void InternalUpdate() { if (_steps == ESteps.None || _steps == ESteps.Done) return; + if (_steps == ESteps.CheckManifest) + { + if (_manifest == null) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = "Can not found active package manifest !"; + } + else + { + _steps = ESteps.GetUnusedCacheFiles; + } + } + if (_steps == ESteps.GetUnusedCacheFiles) - { + { _unusedBundleGUIDs = GetUnusedBundleGUIDs(); _unusedFileTotalCount = _unusedBundleGUIDs.Count; _steps = ESteps.ClearUnusedCacheFiles; diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearUnusedCacheManifestFilesOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearUnusedCacheManifestFilesOperation.cs index 90d6e22e..0de2013f 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearUnusedCacheManifestFilesOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/ClearUnusedCacheManifestFilesOperation.cs @@ -8,6 +8,7 @@ namespace YooAsset private enum ESteps { None, + CheckManifest, ClearUnusedCacheFiles, Done, } @@ -24,13 +25,27 @@ namespace YooAsset } internal override void InternalStart() { - _steps = ESteps.ClearUnusedCacheFiles; + _steps = ESteps.CheckManifest; } internal override void InternalUpdate() { if (_steps == ESteps.None || _steps == ESteps.Done) return; + if (_steps == ESteps.CheckManifest) + { + if (_manifest == null) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = "Can not found active package manifest !"; + } + else + { + _steps = ESteps.ClearUnusedCacheFiles; + } + } + if (_steps == ESteps.ClearUnusedCacheFiles) { try diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs index 020f61d9..9e62d68c 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs @@ -263,7 +263,7 @@ namespace YooAsset /// 执行参数 public ClearCacheFilesOperation ClearCacheFilesAsync(EFileClearMode clearMode, object clearParam = null) { - DebugCheckInitialize(); + DebugCheckInitialize(false); var operation = _playModeImpl.ClearCacheFilesAsync(clearMode.ToString(), clearParam); OperationSystem.StartOperation(PackageName, operation); return operation; @@ -276,7 +276,7 @@ namespace YooAsset /// 执行参数 public ClearCacheFilesOperation ClearCacheFilesAsync(string clearMode, object clearParam = null) { - DebugCheckInitialize(); + DebugCheckInitialize(false); var operation = _playModeImpl.ClearCacheFilesAsync(clearMode, clearParam); OperationSystem.StartOperation(PackageName, operation); return operation;