C#/.NET应用程序编程开发中如何使用内存流(MemoryStream)操作文件(读取或者保存文件)?

C#开发 作者: Rector 147 次阅读 · 读完约需 2 分钟 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

C#/.NET应用程序编程开发中,如何使用内存流(MemoryStream)操作文件(读取或者保存文件)?

比如将内存流MemoryStream保存成文件或者从磁盘文件读成内存流MemoryStream

方案一

.NET Framework内置了MemoryStream写文件的方法WriteTo(),或者在.NET 4及以上版本中使用Stream.CopeyTo()方法。

将内存流MemoryStream写入到文件的方法如下:

using (FileStream file = new FileStream("file.bin", FileMode.Create, System.IO.FileAccess.Write)) {
   byte[] bytes = new byte[ms.Length];
   ms.Read(bytes, 0, (int)ms.Length);
   file.Write(bytes, 0, bytes.Length);
   ms.Close();
}

从指定文件读取内存流MemoryStream的方法如下:

using (MemoryStream ms = new MemoryStream())
using (FileStream file = new FileStream("file.bin", FileMode.Open, FileAccess.Read)) {
   byte[] bytes = new byte[file.Length];
   file.Read(bytes, 0, (int)file.Length);
   ms.Write(bytes, 0, (int)file.Length);
}

.NET Framewrok 4及以上版本中写文件方法如下:

MemoryStream ms = new MemoryStream();
using (FileStream file = new FileStream("file.bin", FileMode.Open, FileAccess.Read))
    file.CopyTo(ms);

.NET Framework 4及以上版本中从指定文件读取内存流MemoryStream方法如下:

using (FileStream file = new FileStream("file.bin", FileMode.Create, System.IO.FileAccess.Write))
    ms.CopyTo(file);

方案二

使用File.ReadAllBytes加载内存流MemoryStream,如下:

var memoryStream = new MemoryStream(File.ReadAllBytes("file.bin"));

将内存流MemoryStream写入到文件的方法如下:

File.WriteAllBytes("file.bin", memoryStream.ToArray());

方案三

封装一个通用的内存流的辅助类及方法,如下:

using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

namespace Serialization
{
    public class Serializer
    {
        public static MemoryStream SerializeToStream(object o)
        {
            MemoryStream stream = new MemoryStream();
            IFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, o);
            return stream;
        }

        public static object DeserializeFromStream(MemoryStream stream)
        {
            IFormatter formatter = new BinaryFormatter();
            stream.Seek(0, SeekOrigin.Begin);
            object o = formatter.Deserialize(stream);
            return o;
        }
    }
}

阅读了该文章的人还浏览了...

本文永久链接码友网 » C#/.NET应用程序编程开发中如何使用内存流(MemoryStream)操作文件(读取或者保存文件)?

发布于: 2019-07-18 11:09:47
分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册