文件流(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/21 10:29:05 编辑过