【问题标题】:How to generate a binary file? C#如何生成二进制文件? C#
【发布时间】:2011-04-18 16:59:30
【问题描述】:

我需要创建一个方法来生成二进制文件(4 字节长),接收整数列表并将这个列表一个一个地写入文件中。所以,我有这个:

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();
        }
    }
}

这是正确的吗?或者其他解决方案

【问题讨论】:

  • 你在测试我们吗?你可以知道它是否正确——当你测试它时发生了什么?
  • 文件已生成,但我只想确保正确
  • 提示:您不需要在 binaryWriter 上显式调用 Close()。 using 语句负责正确执行此操作。
  • 如果您想确保它是正确的,为什么不使用BinaryReader 来读取值并检查数字是否相等?这是非常简单的调试
  • codereview.stackexchange.com 的候选人?

标签: c# binaryfiles binarywriter


【解决方案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&lt;T&gt; 的排序,则可以改为接受IEnumerable&lt;T&gt;。这样您就可以更灵活地处理传入的内容。

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

使用IEnumerable&lt;T&gt; 会强制我们使用foreach,但即使使用List&lt;T&gt;,它也会看起来更清晰/更明显,您正在遍历列表。

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

【讨论】:

    【解决方案2】:

    您不需要关闭binaryWriter,因为无论如何您都有using 子句。 binaryFilePath 需要是类的一个字段,除此之外它看起来还可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2017-09-24
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多