2011-04-18 177 views
1

我需要製作一個方法來生成一個二進制文件(長度爲4個字節),接收整數列表並在文件中逐個寫入這個列表。所以,我有這個:如何生成二進制文件? C#

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

這是正確的嗎?或其他一些解決方案,請

+4

您是在測試我們嗎?你可以知道它是否正確 - 當你測試它時發生了什麼? – Hogan 2011-04-18 17:02:05

+0

該文件已生成,但我只想確保它是正確的 – ale 2011-04-18 17:08:06

+1

提示:您不需要在'binaryWriter'上顯式調用Close()。 'using'語句負責正確執行。 – 2011-04-18 17:10:13

回答

0

您無需關閉binaryWriter,因爲無論如何您都有using子句。 binaryFilePath需要是該課程的一個領域,除了它看起來不錯。

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>。這樣你可以更靈活地通過你的內容。

有些人喜歡堆疊他們的使用語句來刪除一層嵌套(代碼縮進)。就我個人而言,我不是一個很大的粉絲,但這是個人品味和風格的問題。

使用IEnumerable<T>強制我們使用foreach,但即使使用List<T>它也可以看起來更清晰/更明顯,您正在遍歷列表。

如前所述,如果您使用的是using,則不需要顯式關閉二進制寫入程序 - 當退出using塊時將自動完成。

相關問題