using Cysharp.Threading.Tasks; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BITKit.IO { [System.Serializable] public class LocalStorageProvider : StorageProvider { protected virtual string GetAdress(string path) { return path; } public override async Task Combine(string path1, string path2) { await UniTask.Yield(); return Path.Combine(GetAdress(path1), path2); } public override async Task CreateFile(string path) { await UniTask.Yield(); FileInfo fileInfo = new FileInfo(GetAdress(path)); FileProvider file = new(fileInfo); return file; } public override void CreateFolder(string path) { DirectoryInfo directoryInfo = new DirectoryInfo(GetAdress(path)); directoryInfo.Create(); } public override void DeleteFile(string path) { FileInfo file = new FileInfo(GetAdress(path)); file.Delete(); } public override void DeleteFolder(string path) { DirectoryInfo directoryInfo = new DirectoryInfo(GetAdress(path)); directoryInfo.Delete(); } public override async Task FileExists(string path) { await UniTask.Yield(); return File.Exists(GetAdress(path)); } public override async Task GetFile(string path) { await UniTask.Yield(); return new FileProvider(new FileInfo(GetAdress(path))); } public override async Task> ListFiles(string path) { await UniTask.Yield(); DirectoryInfo directoryInfo = new DirectoryInfo(GetAdress(path)); directoryInfo.Create(); return directoryInfo.GetFiles().Select(x => new FileProvider(x)); } public override async Task> ListFolders(string path) { await UniTask.Yield(); DirectoryInfo directoryInfo = new DirectoryInfo(GetAdress(path)); return directoryInfo.GetDirectories().Select(x => new FolderProvider(x)); } public override void RenameFile(string oldPath, string newPath) { File.Move(GetAdress(oldPath), GetAdress(newPath)); } public override void RenameFolder(string oldPath, string newPath) { DirectoryInfo directoryInfo = new DirectoryInfo(GetAdress(oldPath)); directoryInfo.MoveTo(GetAdress(newPath)); } public override void SaveStream(string path, Stream inputStream) { using (var fs = File.Create(GetAdress(path))) { inputStream.CopyTo(fs); fs.Close(); fs.Dispose(); } } public override async Task TryCreateFolder(string path) { await UniTask.Yield(); DirectoryInfo dirInfo = new DirectoryInfo(GetAdress(path)); if (dirInfo.Exists is false) { dirInfo.Create(); return true; } else { return false; } } public override async Task TrySaveStream(string path, Stream inputStream) { await UniTask.Yield(); try { SaveStream(path, inputStream); return true; } catch (Exception ex) { BIT4Log.LogException(ex); return false; } } } }