在C#中将字节数组保存为磁盘上文件的最有效方法是什么?

时间:2008-09-24 17:51:47

标签: c# .net

非常简单的场景。我有一个Web服务,它接收一个字节数组,该数组将保存为磁盘上的特定文件类型。在C#中执行此操作的最有效方法是什么?

7 个答案:

答案 0 :(得分:110)

那将是File.WriteAllBytes()

答案 1 :(得分:40)

System.IO.File.WriteAllBytes(path, data)应该可以。

答案 2 :(得分:10)

WriteAllBytes只执行

using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
{
    stream.Write(bytes, 0, bytes.Length);
}

BinaryWriter有一个误导性的名称,它用于将原语写为字节表示而不是写二进制数据。它的所有Write(byte [])方法都在它使用的流上执行Write(),在本例中是FileStream。

答案 3 :(得分:6)

在这种情况下,不确定“有效”是什么意思,但我会使用System.IO.File.WriteAllBytes(string path, byte[] bytes) - 就LOC而言当然有效。

答案 4 :(得分:3)

也许System.IO.BinaryWriter和BinaryReader类会有所帮助。

http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx

“将二进制中的原始类型写入流并支持以特定编码写入字符串。”

http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx

“将原始数据类型读取为特定编码中的二进制值。”

答案 5 :(得分:3)

我有一个类似的问题,将300 MB Byte数组转储到磁盘文件中...... 我使用了 StreamWriter ,我花了30分钟来转储文件 使用 FilePut 花了我3-4分钟,当我使用 BinaryWriter 时,文件被丢弃了50-60秒。
如果您使用BinaryWriter,您将获得更好的性能。

答案 6 :(得分:2)

实际上,最有效的方法是流式传输数据并在收到数据时进行编写。 WCF支持流式传输,因此这可能是您想要查看的内容。如果您使用大型文件执行此操作,这一点尤其重要,因为您几乎肯定不希望服务器和客户端上的文件内容都在内存中。