using JetBrains.Annotations; using System.IO; using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.VirtualFileSystem; using Volo.Abp.VirtualFileSystem.Embedded; namespace Microsoft.Extensions.FileProviders { public static class AbpFileInfoExtensions { /// /// Reads file content as string using encoding. /// public static string ReadAsString([NotNull] this IFileInfo fileInfo) { return fileInfo.ReadAsString(Encoding.UTF8); } /// /// Reads file content as string using encoding. /// public static Task ReadAsStringAsync([NotNull] this IFileInfo fileInfo) { return fileInfo.ReadAsStringAsync(Encoding.UTF8); } /// /// Reads file content as string using the given . /// public static string ReadAsString([NotNull] this IFileInfo fileInfo, Encoding encoding) { Check.NotNull(fileInfo, nameof(fileInfo)); using (var stream = fileInfo.CreateReadStream()) { using (var streamReader = new StreamReader(stream, encoding, true)) { return streamReader.ReadToEnd(); } } } /// /// Reads file content as string using the given . /// public static async Task ReadAsStringAsync([NotNull] this IFileInfo fileInfo, Encoding encoding) { Check.NotNull(fileInfo, nameof(fileInfo)); using (var stream = fileInfo.CreateReadStream()) { using (var streamReader = new StreamReader(stream, encoding, true)) { return await streamReader.ReadToEndAsync(); } } } /// /// Reads file content as byte[]. /// public static byte[] ReadBytes([NotNull] this IFileInfo fileInfo) { Check.NotNull(fileInfo, nameof(fileInfo)); using (var stream = fileInfo.CreateReadStream()) { return stream.GetAllBytes(); } } /// /// Reads file content as byte[]. /// public static async Task ReadBytesAsync([NotNull] this IFileInfo fileInfo) { Check.NotNull(fileInfo, nameof(fileInfo)); using (var stream = fileInfo.CreateReadStream()) { return await stream.GetAllBytesAsync(); } } public static string GetVirtualOrPhysicalPathOrNull([NotNull] this IFileInfo fileInfo) { Check.NotNull(fileInfo, nameof(fileInfo)); if (fileInfo is EmbeddedResourceFileInfo embeddedFileInfo) { return embeddedFileInfo.VirtualPath; } if (fileInfo is InMemoryFileInfo inMemoryFileInfo) { return inMemoryFileInfo.DynamicPath; } return fileInfo.PhysicalPath; } } }