如何将流保存到C#文件中?

我有一个StreamReader对象,我用一个流初始化,现在我想将这个流保存到磁盘(流可能是.gif.jpg.pdf )。

现有代码:

StreamReader sr = new StreamReader(myOtherObject.InputStream);
  • 我需要将其保存到磁盘(我有文件名)。
  • 将来我可能希望将其存储到SQL Server中。
  • 我也有编码类型,如果我将它存储到SQL Server中,我将需要它,对吗?


    正如Jon Skeet的回答中Tilendor强调的那样,自.NET 4以来,流具有CopyTo方法。

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

    或者using语法:

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

    您不能将StreamReader用于二进制文件(如gif或jpgs)。 StreamReader用于文本数据。 如果将它用于任意二进制数据,几乎肯定会丢失数据。 (如果你使用Encoding.GetEncoding(28591),你可能会没事,但是有什么意义?)

    为什么你需要使用StreamReader ? 为什么不把二进制数据保存为二进制数据并将其作为二进制数据写回磁盘(或SQL)?

    编辑:因为这似乎是人们想看到的东西...如果你只是想复制一个流到另一个(例如到一个文件)使用这样的东西:

    /// <summary>
    /// Copies the contents of input to output. Doesn't close either stream.
    /// </summary>
    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);
    }
    

    请注意, Stream.CopyTo是在.NET 4中引入的,它的用途基本相同。


    public void CopyStream(Stream stream, string destPath)
    {
      using (var fileStream = new FileStream(destPath, FileMode.Create, FileAccess.Write))
      {
        stream.CopyTo(fileStream);
      }
    }
    
    链接地址: http://www.djcxy.com/p/29229.html

    上一篇: How do I save a stream to a file in C#?

    下一篇: Using MySQL with Entity Framework