Convert a Stream to a FileStream in C#

后端 未结 1 1250
粉色の甜心
粉色の甜心 2020-12-14 21:29

What is the best method to convert a Stream to a FileStream using C#.

The function I am working on has a Stream passed to it containing uploaded data, and I need to

相关标签:
1条回答
  • 2020-12-14 21:47

    Read and Seek are methods on the Stream type, not just FileStream. It's just that not every stream supports them. (Personally I prefer using the Position property over calling Seek, but they boil down to the same thing.)

    If you would prefer having the data in memory over dumping it to a file, why not just read it all into a MemoryStream? That supports seeking. For example:

    public static MemoryStream CopyToMemory(Stream input)
    {
        // It won't matter if we throw an exception during this method;
        // we don't *really* need to dispose of the MemoryStream, and the
        // caller should dispose of the input stream
        MemoryStream ret = new MemoryStream();
    
        byte[] buffer = new byte[8192];
        int bytesRead;
        while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            ret.Write(buffer, 0, bytesRead);
        }
        // Rewind ready for reading (typical scenario)
        ret.Position = 0;
        return ret;
    }
    

    Use:

    using (Stream input = ...)
    {
        using (Stream memory = CopyToMemory(input))
        {
            // Seek around in memory to your heart's content
        }
    }
    

    This is similar to using the Stream.CopyTo method introduced in .NET 4.

    If you actually want to write to the file system, you could do something similar that first writes to the file then rewinds the stream... but then you'll need to take care of deleting it afterwards, to avoid littering your disk with files.

    0 讨论(0)
提交回复
热议问题