using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Expert.Untity
{
public class FileTransferHelper
{
///
/// 流转化为字节 (方法内会释放流)
///
public static byte[] Stream2Bytes(Stream stream)
{
if (stream == null)
return null;
byte[] bytes = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(bytes, 0, bytes.Length);
stream.Close();
return bytes;
}
///
/// 流转化为字节 (方法内不会释放流)
///
public static byte[] Stream2Bytes2(Stream stream)
{
if (stream == null)
return null;
byte[] bytes = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(bytes, 0, bytes.Length);
return bytes;
}
///
/// 字节转化为流
///
public static Stream Bytes2Stream(byte[] bytes)
{
if (bytes == null)
return null;
Stream stream = new MemoryStream(bytes);
return stream;
}
///
/// 字节保存至路径
///
public static void Bytes2File(byte[] bytes, string path)
{
FileStream fs = new FileStream(path, FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
fs.Dispose();
}
///
/// 文件转化为流
///
public static Stream File2Stream(string filePath)
{
try
{
if (filePath == null)
return null;
if (!System.IO.File.Exists(filePath))
return null;
//必须先转成byte,否则出了using后,流会关闭
byte[] bs = null;
using (FileStream stream = new FileStream(filePath, FileMode.Open))
{
bs = Stream2Bytes(stream);
}
if (bs == null || bs.Count() == 0)
return null;
else
return new MemoryStream(bs);
}
catch (Exception)
{
return null;
}
}
///
/// 文件转化为字节
///
public static byte[] File2Bytes(string filePath)
{
try
{
//System.IO.File.WriteAllBytes 也可以
if (filePath == null)
return null;
if (!System.IO.File.Exists(filePath))
return null;
//必须先转成byte,否则出了using后,流会关闭
byte[] bs = null;
using (FileStream stream = new FileStream(filePath, FileMode.Open))
{
bs = Stream2Bytes(stream);
}
if (bs == null || bs.Count() == 0)
return null;
else
return bs;
}
catch (Exception)
{
return null;
}
}
///
/// 流变成文件 (方法内会释放流)
///
public static void Stream2File(Stream fileStream, string fileFullName)
{
//判断文件是否可读
if (!fileStream.CanRead)
{
throw new Exception("数据流不可读!");
}
//从开始读起
if (fileStream.Position != 0)
fileStream.Position = 0;
//文件流传输
FileStream targetStream = null;
int fileSize = 0;
using (targetStream = new FileStream(fileFullName, FileMode.Create, FileAccess.Write, FileShare.None))
{
//定义文件缓冲区
const int bufferLen = 4096;
byte[] buffer = new byte[bufferLen];
int count = 0;
while ((count = fileStream.Read(buffer, 0, bufferLen)) > 0)
{
targetStream.Write(buffer, 0, count);
fileSize += count;
}
targetStream.Close();
fileStream.Close();
}
}
///
/// 流变成文件 (方法内不会释放流)
///
public static void Stream2File2(Stream fileStream, string fileFullName)
{
//判断文件是否可读
if (!fileStream.CanRead)
{
throw new Exception("数据流不可读!");
}
//从开始读起
if (fileStream.Position != 0)
fileStream.Position = 0;
//文件流传输
FileStream targetStream = null;
int fileSize = 0;
using (targetStream = new FileStream(fileFullName, FileMode.Create, FileAccess.Write, FileShare.None))
{
//定义文件缓冲区
const int bufferLen = 4096;
byte[] buffer = new byte[bufferLen];
int count = 0;
while ((count = fileStream.Read(buffer, 0, bufferLen)) > 0)
{
targetStream.Write(buffer, 0, count);
fileSize += count;
}
targetStream.Close();
}
}
}
}