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;
}
}
}