From 05ae1163e3e6d265fa4f8cf4ecc4dca470aff834 Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Tue, 29 Apr 2025 00:07:14 +0800 Subject: [PATCH] fixed --- Assets/Script/AxiNSApi/AxiNSIO.cs | 403 ++++++++++++++++-------------- Assets/Script/MainTest.cs | 29 +-- 2 files changed, 230 insertions(+), 202 deletions(-) diff --git a/Assets/Script/AxiNSApi/AxiNSIO.cs b/Assets/Script/AxiNSApi/AxiNSIO.cs index 53ca099..33a8d2b 100644 --- a/Assets/Script/AxiNSApi/AxiNSIO.cs +++ b/Assets/Script/AxiNSApi/AxiNSIO.cs @@ -8,18 +8,18 @@ using System.Text.RegularExpressions; public class AxiNSIO { - string save_name => AxiNS.instance.mount.SaveMountName; - public string save_path => $"{save_name}:/"; + string save_name => AxiNS.instance.mount.SaveMountName; + public string save_path => $"{save_name}:/"; #if UNITY_SWITCH private FileHandle fileHandle = new nn.fs.FileHandle(); #endif - /// - /// 检查Path是否存在 - /// - /// - /// - public bool CheckPathExists(string filePath) - { + /// + /// 检查Path是否存在 + /// + /// + /// + public bool CheckPathExists(string filePath) + { #if !UNITY_SWITCH return false; #else @@ -29,14 +29,14 @@ public class AxiNSIO //这个异常捕获。真的别扭 return nn.fs.FileSystem.ResultPathAlreadyExists.Includes(result); #endif - } - /// - /// 检查Path是否不存在 - /// - /// - /// - public bool CheckPathNotFound(string filePath) - { + } + /// + /// 检查Path是否不存在 + /// + /// + /// + public bool CheckPathNotFound(string filePath) + { #if !UNITY_SWITCH return false; #else @@ -45,14 +45,14 @@ public class AxiNSIO //这个异常捕获。真的别扭 return nn.fs.FileSystem.ResultPathNotFound.Includes(result); #endif - } - /// - /// 创建目录,目录存在也会返回true - /// - /// - /// - public bool CreateDir(string filePath) - { + } + /// + /// 创建目录,目录存在也会返回true + /// + /// + /// + public bool CreateDir(string filePath) + { #if !UNITY_SWITCH return false; #else @@ -64,38 +64,38 @@ public class AxiNSIO } return true; #endif - } + } - /// - /// 保存并创建文件(如果目录不存在回先自动创建目录) - /// - /// - /// - /// - public bool FileToSaveWithCreate(string filePath, System.IO.MemoryStream ms) - { - return FileToSaveWithCreate(filePath, ms.ToArray()); - } - /// - /// 保存并创建文件(如果目录不存在回先自动创建目录) - /// - /// - /// - /// - public AxiNSWait_FileToSaveByMSWithCreate FileToSaveWithCreateAsync(string filePath, System.IO.MemoryStream ms) - { - var wait = new AxiNSWait_FileToSaveByMSWithCreate(filePath, ms); - AxiNS.instance.wait.AddWait(wait); - return wait; - } - /// - /// 保存并创建文件(如果目录不存在回先自动创建目录) - /// - /// - /// - /// - public bool FileToSaveWithCreate(string filePath, byte[] data) - { + /// + /// 保存并创建文件(如果目录不存在回先自动创建目录) + /// + /// + /// + /// + public bool FileToSaveWithCreate(string filePath, System.IO.MemoryStream ms) + { + return FileToSaveWithCreate(filePath, ms.ToArray()); + } + /// + /// 保存并创建文件(如果目录不存在回先自动创建目录) + /// + /// + /// + /// + public AxiNSWait_FileToSaveByMSWithCreate FileToSaveWithCreateAsync(string filePath, System.IO.MemoryStream ms) + { + var wait = new AxiNSWait_FileToSaveByMSWithCreate(filePath, ms); + AxiNS.instance.wait.AddWait(wait); + return wait; + } + /// + /// 保存并创建文件(如果目录不存在回先自动创建目录) + /// + /// + /// + /// + public bool FileToSaveWithCreate(string filePath, byte[] data) + { #if !UNITY_SWITCH return false; #else @@ -199,42 +199,42 @@ public class AxiNSIO return true; #endif - } - /// - /// 保存并创建文件(如果目录不存在回先自动创建目录) - /// - /// - /// - /// - public AxiNSWait_FileToSaveWithCreate FileToSaveWithCreateAsync(string filePath, byte[] data) - { - var wait = new AxiNSWait_FileToSaveWithCreate(filePath, data); - AxiNS.instance.wait.AddWait(wait); - return wait; - } - public byte[] LoadSwitchDataFile(string filename) - { - LoadSwitchDataFile(filename, out byte[] outputData); - return outputData; - } + } + /// + /// 保存并创建文件(如果目录不存在回先自动创建目录) + /// + /// + /// + /// + public AxiNSWait_FileToSaveWithCreate FileToSaveWithCreateAsync(string filePath, byte[] data) + { + var wait = new AxiNSWait_FileToSaveWithCreate(filePath, data); + AxiNS.instance.wait.AddWait(wait); + return wait; + } + public byte[] LoadSwitchDataFile(string filename) + { + LoadSwitchDataFile(filename, out byte[] outputData); + return outputData; + } - public bool LoadSwitchDataFile(string filename, ref System.IO.MemoryStream ms) - { - if (LoadSwitchDataFile(filename, out byte[] outputData)) - { - using (System.IO.BinaryWriter writer = new System.IO.BinaryWriter(ms)) - { - writer.Write(outputData); - } - return true; - } - return false; - } - public bool LoadSwitchDataFile(string filename, out byte[] outputData) - { -#if !UNITY_SWITCH - outputData = null; - return false; + public bool LoadSwitchDataFile(string filename, ref System.IO.MemoryStream ms) + { + if (LoadSwitchDataFile(filename, out byte[] outputData)) + { + using (System.IO.BinaryWriter writer = new System.IO.BinaryWriter(ms)) + { + writer.Write(outputData); + } + return true; + } + return false; + } + public bool LoadSwitchDataFile(string filename, out byte[] outputData) + { +#if !UNITY_SWITCH || UNITY_EDITOR + outputData = null; + return false; #else outputData = null; if (!AxiNS.instance.mount.SaveIsMount) @@ -282,67 +282,100 @@ public class AxiNSIO outputData = loadedData; return true; #endif - } - public AxiNSWait_LoadSwitchDataFile LoadSwitchDataFileAsync(string filename) - { - var wait = new AxiNSWait_LoadSwitchDataFile(filename); - AxiNS.instance.wait.AddWait(wait); - return wait; - } + } + public AxiNSWait_LoadSwitchDataFile LoadSwitchDataFileAsync(string filename) + { + var wait = new AxiNSWait_LoadSwitchDataFile(filename); + AxiNS.instance.wait.AddWait(wait); + return wait; + } - public bool GetDirectoryFiles(string path, out string[] entrys) - { -#if !UNITY_SWITCH - entrys = null; - return false; + public bool GetDirectoryFiles(string path, out string[] entrys) + { +#if !UNITY_SWITCH || UNITY_EDITOR + + entrys = null; + return false; #else return GetDirectoryEntrys(path,nn.fs.OpenDirectoryMode.File,out entrys); #endif - } + } - public bool GetDirectoryDirs(string path, out string[] entrys) - { -#if !UNITY_SWITCH - entrys = null; - return false; + public bool GetDirectoryDirs(string path, out string[] entrys) + { +#if !UNITY_SWITCH || UNITY_EDITOR + entrys = null; + return false; #else return GetDirectoryEntrys(path, nn.fs.OpenDirectoryMode.Directory, out entrys); #endif - } + } #if UNITY_SWITCH - public bool GetDirectoryEntrys(string path, nn.fs.OpenDirectoryMode type, out string[] entrys) + public bool GetDirectoryEntrys(string path, nn.fs.OpenDirectoryMode type, out string[] entrys) { - entrys = null; - return false; - nn.fs.DirectoryHandle dirHandle = new nn.fs.DirectoryHandle(); - nn.Result result = nn.fs.Directory.Open(ref dirHandle, path, type); - if (nn.fs.FileSystem.ResultPathNotFound.Includes(result)) - { - UnityEngine.Debug.Log($"目录 {path} 不存在"); - entrys = null; - return false; - } - long entryCount = 0; - nn.fs.Directory.GetEntryCount(ref entryCount, dirHandle); - nn.fs.DirectoryEntry[] dirEntries = new nn.fs.DirectoryEntry[entryCount]; - long actualEntries = 0; - nn.fs.Directory.Read(ref actualEntries, dirEntries, dirHandle, entryCount); + nn.fs.DirectoryHandle eHandle = new nn.fs.DirectoryHandle(); + nn.Result result = nn.fs.Directory.Open(ref eHandle, path, type); + if (nn.fs.FileSystem.ResultPathNotFound.Includes(result)) + { + UnityEngine.Debug.Log($"目录 {path} 不存在"); + entrys = null; + return false; + } + long entryCount = 0; + nn.fs.Directory.GetEntryCount(ref entryCount, eHandle); + nn.fs.DirectoryEntry[] entries = new nn.fs.DirectoryEntry[entryCount]; + long actualEntries = 0; + nn.fs.Directory.Read(ref actualEntries, entries, eHandle, entryCount); entrys = new string[actualEntries]; - for (int i = 0; i < actualEntries; i++) - { - entrys[i] = dirEntries[i].name; - } - nn.fs.Directory.Close(dirHandle); + for (int i = 0; i < actualEntries; i++) + { + entrys[i] = System.IO.Path.Combine(path, entries[i].name); + } + nn.fs.Directory.Close(eHandle); return true; - } + } #endif - public IEnumerable EnumerateFiles(string path, string searchPattern) - { -#if !UNITY_SWITCH - yield break; + +#if UNITY_SWITCH + public bool GetDirectoryEntrysFullRecursion(string path, out string[] entrys) + { + nn.fs.DirectoryHandle eHandle = new nn.fs.DirectoryHandle(); + nn.Result result = nn.fs.Directory.Open(ref eHandle, path, OpenDirectoryMode.All); + if (nn.fs.FileSystem.ResultPathNotFound.Includes(result)) + { + UnityEngine.Debug.Log($"目录 {path} 不存在"); + entrys = null; + return false; + } + long entryCount = 0; + nn.fs.Directory.GetEntryCount(ref entryCount, eHandle); + nn.fs.DirectoryEntry[] entries = new nn.fs.DirectoryEntry[entryCount]; + long actualEntries = 0; + nn.fs.Directory.Read(ref actualEntries, entries, eHandle, entryCount); + + List temp = new List(); + for (int i = 0; i < actualEntries; i++) + { + string singlePath = System.IO.Path.Combine(path, entries[i].name); + temp.Add(singlePath); + if (entries[i].entryType == EntryType.Directory && GetDirectoryEntrysFullRecursion(singlePath, out string[] singleEntryList)) + { + temp.AddRange(singleEntryList); + } + } + nn.fs.Directory.Close(eHandle); + entrys = temp.ToArray(); + return true; + } +#endif + + public IEnumerable EnumerateFiles(string path, string searchPattern) + { +#if !UNITY_SWITCH || UNITY_EDITOR + yield break; #else // 将通配符转换为正则表达式(支持*和?) var regexPattern = "^" + @@ -366,10 +399,10 @@ public class AxiNSIO } } #endif - } + } - public bool DeletePathFile(string filename) - { + public bool DeletePathFile(string filename) + { #if !UNITY_SWITCH return false; #else @@ -404,15 +437,15 @@ public class AxiNSIO #endif #endif - } - public AxiNSWait_DeletePathFile DeletePathFileAsync(string filename) - { - var wait = new AxiNSWait_DeletePathFile(filename); - AxiNS.instance.wait.AddWait(wait); - return wait; - } - public bool DeletePathDir(string filename) - { + } + public AxiNSWait_DeletePathFile DeletePathFileAsync(string filename) + { + var wait = new AxiNSWait_DeletePathFile(filename); + AxiNS.instance.wait.AddWait(wait); + return wait; + } + public bool DeletePathDir(string filename) + { #if !UNITY_SWITCH return false; #else @@ -445,21 +478,21 @@ public class AxiNSIO UnityEngine.Switch.Notification.LeaveExitRequestHandlingSection(); #endif #endif - } - public AxiNSWait_DeletePathDir DeletePathDirAsync(string filename) - { - var wait = new AxiNSWait_DeletePathDir(filename); - AxiNS.instance.wait.AddWait(wait); - return wait; - } + } + public AxiNSWait_DeletePathDir DeletePathDirAsync(string filename) + { + var wait = new AxiNSWait_DeletePathDir(filename); + AxiNS.instance.wait.AddWait(wait); + return wait; + } - /// - /// 递归删除目录 - /// - /// - /// - public bool DeleteRecursivelyPathDir(string filename) - { + /// + /// 递归删除目录 + /// + /// + /// + public bool DeleteRecursivelyPathDir(string filename) + { #if !UNITY_SWITCH return false; #else @@ -492,15 +525,15 @@ public class AxiNSIO UnityEngine.Switch.Notification.LeaveExitRequestHandlingSection(); #endif #endif - } + } - /// - /// 递归删除情况 - /// - /// - /// - public bool CleanRecursivelyPathDir(string filename) - { + /// + /// 递归删除情况 + /// + /// + /// + public bool CleanRecursivelyPathDir(string filename) + { #if !UNITY_SWITCH return false; #else @@ -533,10 +566,10 @@ public class AxiNSIO UnityEngine.Switch.Notification.LeaveExitRequestHandlingSection(); #endif #endif - } + } - public bool RenameDir(string oldpath, string newpath) - { + public bool RenameDir(string oldpath, string newpath) + { #if !UNITY_SWITCH return false; #else @@ -570,9 +603,9 @@ public class AxiNSIO UnityEngine.Switch.Notification.LeaveExitRequestHandlingSection(); #endif #endif - } - bool EnsureParentDirectory(string filePath, bool bAutoCreateDir = true) - { + } + bool EnsureParentDirectory(string filePath, bool bAutoCreateDir = true) + { #if !UNITY_SWITCH return false; #else @@ -648,14 +681,14 @@ public class AxiNSIO return true; #endif - } - /// - /// 检查指定挂载点是否可访问 - /// - /// 路径前缀,例如 "save:/" 或 "sd:/" - /// 挂载点是否可访问 - bool IsMountPointAccessible(string pathPrefix) - { + } + /// + /// 检查指定挂载点是否可访问 + /// + /// 路径前缀,例如 "save:/" 或 "sd:/" + /// 挂载点是否可访问 + bool IsMountPointAccessible(string pathPrefix) + { #if !UNITY_SWITCH return false; #else @@ -693,5 +726,5 @@ public class AxiNSIO return true; // 其他挂载点需根据实际需求实现 } #endif - } + } } diff --git a/Assets/Script/MainTest.cs b/Assets/Script/MainTest.cs index 5d57b2e..143d40a 100644 --- a/Assets/Script/MainTest.cs +++ b/Assets/Script/MainTest.cs @@ -129,28 +129,26 @@ public class MainTest : MonoBehaviour UnityEngine.Debug.Log($"result =>{result}"); else { + UnityEngine.Debug.Log($"====EntrysList===="); foreach (var e in elist) - { - UnityEngine.Debug.Log($"result =>{result}"); - } + UnityEngine.Debug.Log(e); } } ); text17.text = $"AxiNS.instance.io.GetDirectoryEntrys({"save:/"},nn.fs.OpenDirectoryMode.All,out var elist)"; btn18.onClick.AddListener(() => { - bool result = AxiNS.instance.io.GetDirectoryEntrys("save:/axibug", nn.fs.OpenDirectoryMode.All, out var elist); + bool result = AxiNS.instance.io.GetDirectoryEntrysFullRecursion("save:/",out var elist); if (!result) UnityEngine.Debug.Log($"result =>{result}"); else { + UnityEngine.Debug.Log($"==== FullRecursion Entrys List===="); foreach (var e in elist) - { - UnityEngine.Debug.Log($"result =>{result}"); - } + UnityEngine.Debug.Log(e); } } - ); text18.text = $"AxiNS.instance.io.GetDirectoryEntrys({"save:/axibug"},nn.fs.OpenDirectoryMode.All,out var elist)"; + ); text18.text = $"AxiNS.instance.io.GetDirectoryEntrysFullRecursion({"save:/"},out var elist)"; btn19.onClick.AddListener(() => { @@ -159,10 +157,9 @@ public class MainTest : MonoBehaviour UnityEngine.Debug.Log($"result =>{result}"); else { + UnityEngine.Debug.Log($"====EntrysList===="); foreach (var e in elist) - { - UnityEngine.Debug.Log($"result =>{result}"); - } + UnityEngine.Debug.Log(e); } } ); text19.text = $"AxiNS.instance.io.GetDirectoryEntrys({"save:/axibug/"},nn.fs.OpenDirectoryMode.All,out var elist)"; @@ -174,10 +171,9 @@ public class MainTest : MonoBehaviour UnityEngine.Debug.Log($"result =>{result}"); else { + UnityEngine.Debug.Log($"====EntrysList===="); foreach (var e in elist) - { - UnityEngine.Debug.Log($"result =>{result}"); - } + UnityEngine.Debug.Log(e); } } ); text20.text = $"AxiNS.instance.io.GetDirectoryDirs({"save:/"},out var elist)"; @@ -189,10 +185,9 @@ public class MainTest : MonoBehaviour UnityEngine.Debug.Log($"result =>{result}"); else { + UnityEngine.Debug.Log($"====EntrysList===="); foreach (var e in elist) - { - UnityEngine.Debug.Log($"result =>{result}"); - } + UnityEngine.Debug.Log(e); } } ); text21.text = $"AxiNS.instance.io.GetDirectoryFiles({"save:/"},out var elist)";