using System.IO; using System.Text; using System.Threading.Tasks; namespace MAX.Core.Helpers; /// /// 文件和流操作 /// public static partial class FileHelper { /// /// 流转换为字节流 /// /// 流 public static async Task ToBytesAsync(Stream stream) { stream.Seek(0, SeekOrigin.Begin); byte[] buffer = new byte[stream.Length]; await stream.ReadAsync(buffer, 0, buffer.Length); return buffer; } /// /// 流转换为字节流 /// /// 流 public static byte[] ToBytes(Stream stream) { stream.Seek(0, SeekOrigin.Begin); byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); return buffer; } /// /// 字符串转换成字节数组 /// /// 数据,默认字符编码utf-8 public static byte[] ToBytes(string data) { return ToBytes(data, Encoding.UTF8); } /// /// 字符串转换成字节数组 /// /// 数据 /// 字符编码 public static byte[] ToBytes(string data, Encoding encoding) { if (string.IsNullOrWhiteSpace(data)) { return new byte[] { }; } return encoding.GetBytes(data); } /// /// 将文件读取到字节流中 /// /// 文件的绝对路径 public static byte[] Read(string filePath) { if (!File.Exists(filePath)) { return null; } FileInfo fileInfo = new(filePath); using BinaryReader reader = new(fileInfo.Open(FileMode.Open)); return reader.ReadBytes((int)fileInfo.Length); } /// /// 流转换成字符串 /// /// 流 /// 字符编码 /// 缓冲区大小 /// 读取完成是否释放流,默认为true public static string ToString(Stream stream, Encoding encoding = null, int bufferSize = 1024 * 2, bool isCloseStream = true) { if (stream == null) { return string.Empty; } encoding ??= Encoding.UTF8; if (stream.CanRead == false) { return string.Empty; } using StreamReader reader = new(stream, encoding, true, bufferSize, !isCloseStream); if (stream.CanSeek) { stream.Seek(0, SeekOrigin.Begin); } string result = reader.ReadToEnd(); if (stream.CanSeek) { stream.Seek(0, SeekOrigin.Begin); } return result; } /// /// 流转换成字符串 /// /// 流 /// 字符编码 /// 缓冲区大小 /// 读取完成是否释放流,默认为true public static async Task ToStringAsync(Stream stream, Encoding encoding = null, int bufferSize = 1024 * 2, bool isCloseStream = true) { if (stream == null) { return string.Empty; } encoding ??= Encoding.UTF8; if (stream.CanRead == false) { return string.Empty; } using StreamReader reader = new(stream, encoding, true, bufferSize, !isCloseStream); if (stream.CanSeek) { stream.Seek(0, SeekOrigin.Begin); } string result = await reader.ReadToEndAsync(); if (stream.CanSeek) { stream.Seek(0, SeekOrigin.Begin); } return result; } /// /// 复制流并转换成字符串 /// /// 流 /// 字符编码 public static async Task CopyToStringAsync(Stream stream, Encoding encoding = null) { if (stream == null) { return string.Empty; } encoding ??= Encoding.UTF8; if (stream.CanRead == false) { return string.Empty; } using MemoryStream memoryStream = new(); using StreamReader reader = new(memoryStream, encoding); if (stream.CanSeek) { stream.Seek(0, SeekOrigin.Begin); } stream.CopyTo(memoryStream); if (memoryStream.CanSeek) { memoryStream.Seek(0, SeekOrigin.Begin); } string result = await reader.ReadToEndAsync(); if (stream.CanSeek) { stream.Seek(0, SeekOrigin.Begin); } return result; } }