将流转换为C#中的FileStream

前端之家收集整理的这篇文章主要介绍了将流转换为C#中的FileStream前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用C#将Stream转换为FileStream的最佳方法是什么?

我正在处理的功能有一个Stream传递给它包含上传的数据,我需要能够执行Stream.Read(),stream.Seek()方法,这是FileStream类型的方法.

一个简单的演员不行,所以我在这里求助.

解决方法

Read和Seek是Stream类型的方法,而不仅仅是FileStream.只是不是每个流都支持它们. (个人而言,我更喜欢使用 Position property调用Seek,但是它们也是一样的).

如果您希望将内存中的数据转储到文件中,那么为什么不将它全部读入MemoryStream?这支持寻求.例如:

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,buffer.Length)) > 0)
    {
        ret.Write(buffer,bytesRead);
    }
    // Rewind ready for reading (typical scenario)
    ret.Position = 0;
    return ret;
}

使用:

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

这与使用.NET 4中引入的Stream.CopyTo方法类似.

如果你真的想写入文件系统,你可以做一些类似的操作,首先写入文件,然后倒带流…但是之后你需要保留删除它,以避免用文件乱丢磁盘.

猜你在找的C#相关文章