LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 文件流(FileStream)读、写运用介绍

admin
2025年7月14日 23:19 本文热度 79

     文件流(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字节数据流

/// <summary>  /// 将文件转为byte字节二进制数据流/// </summary>  /// <param name="filePath">文件的绝对路径</param>  public byte[] ReadFileBytes(string filePath){    byte[] buffer;    try    {        //将文件转换为流        using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read)) //FileShare.Read防占用打开读取        {            //创建一个临时缓冲区              buffer = new byte[fs.Length];
            //将文件流读入缓冲区              fs.Read(buffer, 0, buffer.Length);
            //关闭文件流              fs.Close();
            // 把 byte[] 转换成 Stream             //Stream stream = new MemoryStream(buffer);
            //string ss = Encoding.Default.GetString(buffer, 0, fileSize);文件流转换为字符串        }    }    catch    {        return null;    }    return buffer;}

2、将文件转为Stream数据流

/// </summary>/// 将文件转为Stream数据流/// </summary>/// <param name="filePath"></param>/// <returns></returns>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();
            // 把 byte[] 转换成 Stream             stream = new MemoryStream(buffer);        }    }    catch    {        return null;    }    return stream;}

3、将文件转为MemoryStream数据流

/// <summary>/// 将文件转为MemoryStream数据流/// </summary>/// <param name="FilePath"></param>/// <returns></returns>public MemoryStream ReadFileMemorySteam(string FilePath){    try    {        ///定义并实例化一个内存流,以存放图片的字节数组。         using (MemoryStream RetMemoryFile = new MemoryStream())        {            ///读入FileStream            using (FileStream fi = new FileStream(FilePath, FileMode.Open))            {                ///把FileStream写入MemoryStream                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字节二进制数据流
/// <summary>  /// 文件Stream数据流转换为byte字节二进制数据流/// </summary>  /// <param name="stream">原始流</param>  public byte[] FileStreamToBytes(Stream stream){    try    {        //创建缓冲区          byte[] buffer = new byte[stream.Length];
        //读取流          stream.Read(buffer, 0int.Parse(stream.Length.ToString()));
        //返回流          return buffer;    }    catch    {        return null;    }    finally    {        //关闭流          stream.Close();    }}

三、图片数据流处理:

1、将Bitmap图片转换Stream数据流

/// <summary>/// 将Bitmap图片转换Stream数据流/// </summary>/// <param name="bitmap"></param>/// <returns></returns>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对像

/// <summary>/// 将图片的byte字节流转换为Image对像/// </summary>/// <param name="bytes"></param>/// <returns></returns>public Image ByteToImage(byte[] bytes){    try    {        Image RetImg = null;        if (bytes == nullreturn null;        using (MemoryStream stream = new MemoryStream(bytes))        {            RetImg = Image.FromStream(stream);            stream.Flush();        }        return RetImg;    }    catch (Exception)    {        return null;    }}

3、将Bitmap图片转换为Image对像

/// <summary>/// 将Bitmap图片转换为Image对像/// </summary>/// <param name="bitmap"></param>/// <returns></returns>public Image BitmapToImage(Bitmap bitmap){    try    {        //Bitmap 转换为 Stream        MemoryStream stream = new MemoryStream();        bitmap.Save(stream, ImageFormat.Jpeg);        stream.Seek(0, SeekOrigin.Begin);
        //Stream 转换为 byte[]        byte[] buffer = FileStreamToBytes(stream);
        Image RetImg = ByteToImage(buffer);
        return RetImg;    }    catch (Exception)    {        return null;    }}

四、将二进制数据流写入文件

1、将byte字节数据流写入文件
/// <summary>  /// 将byte字节数据流写入文件/// </summary>  /// <param name="filePath">文件的绝对路径</param>  /// <param name="buffer">二进制流数据</param>  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数据流写入文件

/// <summary>/// 将Stream数据流写入文件/// </summary>/// <param name="filePath">文件的绝对路径</param>/// <param name="stream">文件内容流</param>/// <returns></returns>public bool WriteFileStream(string filePath, Stream stream){    try    {        if (File.Exists(filePath)) File.Delete(filePath);
        // 把 Stream 转换成 byte[]         byte[] bytes = new byte[stream.Length];        stream.Read(bytes, 0, bytes.Length);
        // 设置当前流的位置为流的开始         stream.Seek(0, SeekOrigin.Begin);
        // 把 byte[] 写入文件         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数据流写入文件

/// <summary>/// MemoryStream 二进制内存流写入文件   /// </summary>/// <param name="FilePath">文件的绝对路径</param>/// <param name="m">文件内容流</param>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 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved