如何生成二进制文件? C#

时间:2011-04-18 16:59:31

标签: c# binaryfiles binarywriter

我需要创建一个生成二进制(4个字节长)的方法,接收整数List并在文件中逐个写入此List。所以,我有这个:

public void FrameCodesBinaryWriter(List<int> frameCodes)
{
    using (FileStream fileStream = new FileStream(binaryFilePath,  FileMode.Create)) // destiny file directory.
    {
        using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
        {
            for (int i = 0; i < frameCodes.Count; i++)
            {
                binaryWriter.Write(frameCodes[i]);
            }
            binaryWriter.Close();
        }
    }
}

这是对的吗?或其他一些解决方案

2 个答案:

答案 0 :(得分:1)

因为它应该可以正常工作。这是一个重构版本,您可以选择您喜欢的重构位。

public void WriteFrameCodesAsBinary(IEnumerable<int> frameCodes)
{
    using (FileStream fileStream = new FileStream(binaryFilePath,  FileMode.Create))
    using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
    {
        foreach (int frameCode in frameCodes) {
            binaryWriter.Write(frameCode);
        }
    }
}

我会重命名该函数来描述它将要执行的操作。 FrameCodesBinaryWriter听起来更像是我的班级名称。

如果您不需要List<T>的排序,则可能接受IEnumerable<T>。通过这种方式,您可以更灵活地传递内容。

有些人喜欢堆叠他们的using语句来删除一层嵌套(代码缩进)。就我个人而言,我并不是一个忠实的粉丝,但这是个人品味和风格的问题。

使用IEnumerable<T>强制我们使用foreach,但即使使用List<T>,它也可以看起来更清晰/让您更清楚地浏览列表。

如前所述,如果您使用using,则无需显式关闭二进制编写器 - 这将在退出using块时自动完成。

答案 1 :(得分:0)

您无需关闭binaryWriter,因为您还有using子句。 binaryFilePath需要成为班级的一个领域,除了看起来不错。