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