C# - 如何读写二进制文件?

时间:2009-09-20 07:45:36

标签: c# vb.net filestream binaryfiles

如何从任何文件中读取原始字节数组,并将该字节数组写回新文件?

4 个答案:

答案 0 :(得分:7)

(编辑:请注意,问题已更改;最初未提及byte[];请参阅revision 1

嗯,File.Copy跳跃到脑海;但除此之外,这听起来像Stream场景:

    using (Stream source = File.OpenRead(inPath))
    using (Stream dest = File.Create(outPath)) {
        byte[] buffer = new byte[2048]; // pick size
        int bytesRead;
        while((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0) {
            dest.Write(buffer, 0, bytesRead);
        }
    }

答案 1 :(得分:5)

byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);

答案 2 :(得分:3)

您知道TextReaderTextWriter及其后代StreamReaderStreamWriter吗?我认为这些会解决你的问题,因为它们处理编码,BinaryReader不知道编码甚至文本,它只关心字节。

How to read text from a file

How to write text to a file

This is an excellent intro to file IO and encodings.

答案 3 :(得分:0)

添加最新答案,

using (var source = File.OpenRead(inPath))
{
    using (var dest = File.Create(outPath))
    {
        source.CopyTo(dest);
    }
}

您可以选择指定缓冲区大小

using (var source = File.OpenRead(inPath))
{
    using (var dest = File.Create(outPath))
    {
        source.CopyTo(dest, 2048); // or something bigger.
    }
}

或者你可以在另一个线程上执行操作,

using (var source = File.OpenRead(inPath))
{
    using (var dest = File.Create(outPath))
    {
        await source.CopyToAsync(dest);
    }
}

当主线程必须执行其他工作时非常有用,例如WPF和Windows应用商店应用。