文件流(FileStream)转换技术是软件开发的基础能力,合理运用可以高效解决各种文件处理需求,特别是在处理大文件或需要低内存占用的场景中表现尤为突出。
文件流是处理文件数据的核心机制,在实际运用中,可以将多种格式例如文本,图片,音频、视频、压缩包文件等不同格式文件转换为文件流;
文件流可运用于Web系统中的文件上传、下载,及云存储服务的文件传输,文件加密/解密,数字签名验证,跨平台文件交换,移动端与服务器文件同步,不同系统间文件格式转换,二进制协议通信等;
本文介绍内容如下:
1、文件转换为数据流:
(1)将文件转为byte字节数据流;
(2)将文件转为Stream数据流;
(3)将文件转为MemoryStream数据流;
2、文件数据流互换:
(1)文件Stream数据流转换为byte字节二进制数据流;
3、图片数据流处理:
(1)将Bitmap图片转换Stream数据流;
(2)将Bitmap图片转换为Image对像;
(3)将图片的byte字节流转换为Image对像;
4、将二进制数据流写入文件:
(1)将byte字节数据流写入文件;
(2)将Stream数据流写入文件;
(3)将MemoryStream数据流写入文件;
注:对于大容量文件,用于远程网络传输时,可以采用分段传输,在传输线程中合理的设置好缓存大小分段传输,有兴趣的同学可以尝试远程文件传输;
以下为详细调用函数:
一、将文件转换为二进制文件流:
1、将文件转为byte字节数据流
public byte[] ReadFileBytes(string filePath)
{
byte[] buffer;
try
{
using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read))
{
buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
}
}
catch
{
return null;
}
return buffer;
}
2、将文件转为Stream数据流
public Stream ReadFileStream(string filePath)
{
Stream stream;
try
{
using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read))
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
stream = new MemoryStream(buffer);
}
}
catch
{
return null;
}
return stream;
}
3、将文件转为MemoryStream数据流
public MemoryStream ReadFileMemorySteam(string FilePath)
{
try
{
using (MemoryStream RetMemoryFile = new MemoryStream())
{
using (FileStream fi = new FileStream(FilePath, FileMode.Open))
{
RetMemoryFile.SetLength(fi.Length);
fi.Read(RetMemoryFile.GetBuffer(), 0, (int)fi.Length);
RetMemoryFile.Flush();
fi.Close();
}
return RetMemoryFile;
}
}
catch (Exception)
{
return null;
}
}
二、文件数据流互换:
1、文件Stream数据流转换为byte字节二进制数据流
public byte[] FileStreamToBytes(Stream stream)
{
try
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, int.Parse(stream.Length.ToString()));
return buffer;
}
catch
{
return null;
}
finally
{
stream.Close();
}
}
三、图片数据流处理:
1、将Bitmap图片转换Stream数据流
public Stream BitmapStream(Bitmap bitmap)
{
try
{
MemoryStream stream = new MemoryStream();
bitmap.Save(stream, ImageFormat.Jpeg);
stream.Seek(0, SeekOrigin.Begin);
return stream;
}
catch (Exception)
{
return null;
}
}
2、将图片的byte字节流转换为Image对像
public Image ByteToImage(byte[] bytes)
{
try
{
Image RetImg = null;
if (bytes == null) return null;
using (MemoryStream stream = new MemoryStream(bytes))
{
RetImg = Image.FromStream(stream);
stream.Flush();
}
return RetImg;
}
catch (Exception)
{
return null;
}
}
3、将Bitmap图片转换为Image对像
public Image BitmapToImage(Bitmap bitmap)
{
try
{
MemoryStream stream = new MemoryStream();
bitmap.Save(stream, ImageFormat.Jpeg);
stream.Seek(0, SeekOrigin.Begin);
byte[] buffer = FileStreamToBytes(stream);
Image RetImg = ByteToImage(buffer);
return RetImg;
}
catch (Exception)
{
return null;
}
}
四、将二进制数据流写入文件
public bool WriteFileBytes(string filePath, byte[] buffer)
{
try
{
if (File.Exists(filePath)) File.Delete(filePath);
FileInfo file = new FileInfo(filePath);
if (!file.IsReadOnly) return false;
using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
fs.Seek(0, SeekOrigin.End);
fs.Write(buffer, 0, buffer.Length);
fs.Close();
}
}
catch
{
return false;
}
return true;
}
2、将Stream数据流写入文件
public bool WriteFileStream(string filePath, Stream stream)
{
try
{
if (File.Exists(filePath)) File.Delete(filePath);
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Seek(0, SeekOrigin.Begin);
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
bw.Write(bytes);
bw.Close();
}
fs.Close();
}
}
catch
{
return false;
}
return true;
}
3、将MemoryStream数据流写入文件
public void WriteMemoryStream(string FilePath, MemoryStream m)
{
try
{
using (FileStream fs = new FileStream(FilePath, FileMode.Create))
{
using (BinaryWriter w = new BinaryWriter(fs))
{
w.Write(m.ToArray());
fs.Close();
m.Close();
}
}
}
catch (Exception)
{
}
}
阅读原文:原文链接
该文章在 2025/7/15 10:42:18 编辑过