如何将MemoryStream数据写入文件

时间:2012-03-06 19:46:26

标签: .net c#-4.0 streaming

我有这段代码:

private void SaveStreamToFile(string fileFullPath, Stream stream)
    {
        if (stream.Length == 0) return;

        // Create a FileStream object to write a stream to a file
        using (FileStream fileStream = System.IO.File.Create(fileFullPath, (int)stream.Length))
        {
            // Fill the bytes[] array with the stream data
            byte[] bytesInStream = new byte[stream.Length];
            stream.Read(bytesInStream, 0, (int)bytesInStream.Length);

            // Use FileStream object to write to the specified file
            fileStream.Write(bytesInStream, 0, bytesInStream.Length);
        }
    }

我将此方法称为此SaveStreamToFile(@“f:\ Test.txt”,memoryStream);

我收到错误:不允许文件操作。访问路径'f:\ Test.txt'被拒绝。

2 个答案:

答案 0 :(得分:8)

嗯,大概这意味着您没有f:\Test.txt的写入权限。这确实是.NET范围之外的问题。

但是,您的方法已被破坏。这里:

byte[] bytesInStream = new byte[stream.Length];
stream.Read(bytesInStream, 0, (int)bytesInStream.Length);

假设你可以得到流的长度(并非所有的流都支持这个),你也假设 Read将一气呵成地阅读整篇文章。情况不一定如此。

如果您使用的是.NET 4,则可以使用Stream.CopyTo,这将使生活变得更加简单。 (虽然如果流中没有数据,这将无法帮助您中止。)但是您仍然需要修复无法写入f:\Test.txt的问题。

答案 1 :(得分:0)

我也遇到了这个错误,就像Jon Skeet所说,第一个问题是访问权限。

这是因为我没有使用相对路径来到达目标文件夹。一旦我改变它,它允许我毫无困难地访问和修改。