2011-03-02 4 views
3

지금 작업하고있는 프로그램이 파일을 생성해야합니다. 먼저 파일의 내용을 문자열로 생성 한 다음 해당 문자열을 파일에 쓰거나 아니면 파일에 내용을 직접 추가해야합니까?문자열을 먼저 작성한 다음 파일에 써야합니까?

하나가 다른 것보다 장점이 있습니까?

파일의 크기는 약 0.5 - 1MB입니다.

+0

"파일 내용을 문자열로 생성 하시겠습니까?" – Rahul

+0

기본적으로 하드 코딩 된 큰 부분을 가진 특정 형식의 파일로 변환되어야하는 거대한 사전이 있습니다. 그래서, 내가 갈 때 파일에 써야하는지, 아니면 먼저 모든 것을 stringbuilder에 쓰는지, 그리고 나서 내가 돔 인 파일에이 stringbuilder를 씁니다. – xbonez

답변

9

파일을 쓰기 만하면 파일이 충분히 크고 끊임없이 스트림을 플러시하면 모든 것을 메모리에 보관하지 않아도됩니다.

그러나 단 한 번의 촬영이 아니라 일정 기간 동안 IO를 수행하고 있기 때문에 부분적으로 작성된 파일에 문제가 발생할 가능성이 더 큽니다.

필자는 개인적으로 StringBuilder를 사용하여 빌드 한 다음 디스크에 모든 내용을 한 번에 기록합니다.

+3

부분적으로 쓰여진 파일이 문제라면, 한 가지 옵션이 있습니다. 임시 파일에 쓰고 파일이 준비되면 원하는 위치로 옮깁니다. 그렇게하면 두 가지 이점을 얻을 수 있습니다. 너무 많은 메모리를 저장하지 않으면 서 동시에 결과 파일이 일관성을 유지하는지 확인합니다. –

+1

단일 샷으로 작성 ** ** 부분적으로 작성된 파일을 제공 할 수 있으므로 점진적으로 작성하지 않아야합니다. –

+0

@Fredrik - true, @Rowland를 가져 오는 오류 처리 때문에 StringBuilder와 함께 사용하기는하지만 사실입니다. 또한 true 일 수도 있지만 1) 가능성이 낮고 2) 오류 처리가 필요합니다. 그 시나리오는 단일 장소에있을 수 있습니다. – jvenema

-1

데이터를 저장하기 위해 string 또는 stringbuilder를 사용하는 것이 더 좋다고 생각합니다. File.Write 함수를 사용하여 파일에 쓸 수 있습니다.

+1

그 주장을 뒷받침 할 수 있습니다 ... –

2

일반적으로 StreamWriter을 작성하고 작성하는 것이 더 좋은 아이디어라고 생각합니다. 당신이 할 필요가 없을 때 왜 물건을 기억에 보관합니까? 그리고 훨씬 더 쉽습니다. 예를 들면 :

var sb = new StringBuilder(); 
sb.AppendLine(string.Format("{0:N0} blocks read", blocksRead)); 
// etc., etc. 
// and finally write it to file 
File.WriteAllText("filename", sb.ToString()); 

물론, 다른 옵션이 있습니다 :

using (var writer = new StreamWriter("filename")) 
{ 
    writer.WriteLine(header); 
    // write all your data with Write and WriteLine, 
    // taking advantage of composite formatting 
} 

당신이 뭔가를 작성해야 StringBuilder 여러 라인을 구축하려는 경우

. List<string>에 줄을 쌓은 다음 File.WriteAllLines을 사용할 수 있습니다. 또는 StringStream에 쓰고 그 파일에 쓸 수 있습니다. 그러나 이러한 모든 접근 방식으로 데이터를 여러 번 처리해야합니다. StreamWriter을 열고 작성하십시오. 당신은 그것이 당신의 출력 데이터에 맞게 너무 큰 것으로 나타났다 때 코드를 리팩토링 할 필요가 없습니다

  • :

    나는 그것이 출력에 직접 가서 일반적으로 더 좋은 아이디어라고 생각 주된 이유

    기억.
  • 계획된 대상이 파일이므로 어쨌든 파일에 쓰기 전에 메모리에 서식을 지정하는 것이 어리석은 이유는 무엇입니까?
  • 텍스트 파일에 여러 줄을 작성하는 API는 StringBuilder에 줄을 추가하는 API보다 깔끔합니다.
관련 문제