using System; using System.IO; using System.Text; namespace YooAsset { public class RawFileHandle : HandleBase, IDisposable { private System.Action _callback; internal RawFileHandle(ProviderBase provider) : base(provider) { } internal override void InvokeCallback() { _callback?.Invoke(this); } /// /// 完成委托 /// public event System.Action Completed { add { if (IsValidWithWarning == false) throw new System.Exception($"{nameof(RawFileHandle)} is invalid"); if (Provider.IsDone) value.Invoke(this); else _callback += value; } remove { if (IsValidWithWarning == false) throw new System.Exception($"{nameof(RawFileHandle)} is invalid"); _callback -= value; } } /// /// 等待异步执行完毕 /// public void WaitForAsyncComplete() { if (IsValidWithWarning == false) return; Provider.WaitForAsyncComplete(); } /// /// 释放资源句柄 /// public void Release() { this.ReleaseInternal(); } /// /// 释放资源句柄 /// public void Dispose() { this.ReleaseInternal(); } /// /// 获取原生文件的二进制数据 /// public byte[] GetRawFileData() { if (IsValidWithWarning == false) return null; string filePath = Provider.RawFilePath; return FileUtility.ReadAllBytes(filePath); } /// /// 获取原生文件的文本数据 /// public string GetRawFileText() { if (IsValidWithWarning == false) return null; string filePath = Provider.RawFilePath; return FileUtility.ReadAllText(filePath); } /// /// 获取原生文件的路径 /// public string GetRawFilePath() { if (IsValidWithWarning == false) return string.Empty; return Provider.RawFilePath; } } }