2011-04-18 3 views
1

바이너리 (4 바이트 길이)를 생성하고 정수 List를 받아이 목록을 파일에 하나씩 작성하는 메소드를 만들어야합니다. 그래서,이 있습니다 :바이너리 파일을 생성하는 방법은 무엇입니까? 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

+0

파일이 생성되었지만 올바른지 확인하고 싶습니다. – ale

+1

팁 : 'binaryWriter'에서 Close()를 명시 적으로 호출 할 필요가 없습니다. 'using' 문은 그 일을 올바르게 처리합니다. –

답변

0

어쨌든 using 절이 있기 때문에 binaryWriter을 닫을 필요가 없습니다. 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>을 수락하는 것이 좋습니다. 이렇게하면 전달하는 것에 대해보다 유연하게 대응할 수 있습니다.

일부 사람들은 using 문을 스택하여 중첩 계층 (코드 들여 쓰기)을 제거하려고합니다. 개인적으로 나는 이것에 대한 엄청난 팬이 아니지만 개인적인 취향과 스타일의 문제입니다.

우리가 foreach를 사용하기 IEnumerable<T> 힘을 사용하지만, 심지어 List<T>으로는/청소기 보면 당신은 목록을 반복하는 것이 더 분명 할 수 있습니다.

using을 사용하는 경우 명시 적으로 이진 작성기를 닫을 필요가 없습니다. using 블록을 종료하면 자동으로 수행됩니다.

관련 문제