号外号外: 原[图享网]更名为 码友网(codedefault.com) 啦,感谢大家一路上的陪伴与支持。代码的世界里,码友网与大家一起同行!

[.NET/C#]C#应用程序中如何将文件流保存成本地文件?

.NET 作者: Rector 84阅读 0评论 0收藏 收藏本文

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

[.NET/C#]C#应用程序中如何将文件流保存成本地文件?

问题描述

如标题所述,在C#应用程序中,当前有一个使用 Stream 流初始化的 StreamReader 对象,如何将此文件流保存成本地文件呢(其中这个流有可能是 .gif,或者 .jpg 或者 .pdf 等等)?比如:

StreamReader sr = new StreamReader(myOtherObject.InputStream);

方案一

如果是.NET 4或者以上版本,你可以使用 streamCopyTo 方法:

var fileStream = File.Create("C:\\Path\\To\\File");
myOtherObject.InputStream.Seek(0, SeekOrigin.Begin);
myOtherObject.InputStream.CopyTo(fileStream);
fileStream.Close();

或者,你也可以使用 using 语句块,把这个代码块放到 using 语句块中,如:

using (var fileStream = File.Create("C:\\Path\\To\\File"))
{
    myOtherObject.InputStream.Seek(0, SeekOrigin.Begin);
    myOtherObject.InputStream.CopyTo(fileStream);
}

方案二

public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[8 * 1024];
    int len;
    while ( (len = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, len);
    }
}

调用方法:

using (Stream file = File.Create(filename))
{
    CopyStream(input, file);
}

方案三

public void CopyStream(Stream stream, string destPath)
{
  using (var fileStream = new FileStream(destPath, FileMode.Create, FileAccess.Write))
  {
    stream.CopyTo(fileStream);
  }
}

方案四

private void SaveFileStream(String path, Stream stream)
{
    var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write);
    stream.CopyTo(fileStream);
    fileStream.Dispose();
}

方案五

如果在.NET 4版本以下:

public void SaveStreamToFile(Stream stream, string filename)
{
   using(Stream destination = File.Create(filename))
      Write(stream, destination);
}

public void Write(Stream from, Stream to)
{
   for(int a = from.ReadByte(); a != -1; a = from.ReadByte())
      to.WriteByte( (byte) a );
}

或者:
先将输入流转换成字节数组

byte[] bytes = myOtherObject.InputStream.ToArray();

然后,再将字节数组写入文件:

public static void WriteFile(string fileName, byte[] bytes)
{
    string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    if (!path.EndsWith(@"\")) path += @"\";

    if (File.Exists(Path.Combine(path, fileName)))
        File.Delete(Path.Combine(path, fileName));

    using (FileStream fs = new FileStream(Path.Combine(path, fileName), FileMode.CreateNew, FileAccess.Write)
    {
        fs.Write(bytes, 0, (int)bytes.Length);
        fs.Close();
    }
}

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

本文永久链接码友网 » [.NET/C#]C#应用程序中如何将文件流保存成本地文件?

发布于: 2018-01-24 21:40:36
分享扩散:

文章评论

获取验证码