지금 작업하고있는 프로그램이 파일을 생성해야합니다. 먼저 파일의 내용을 문자열로 생성 한 다음 해당 문자열을 파일에 쓰거나 아니면 파일에 내용을 직접 추가해야합니까?문자열을 먼저 작성한 다음 파일에 써야합니까?
하나가 다른 것보다 장점이 있습니까?
파일의 크기는 약 0.5 - 1MB입니다.
지금 작업하고있는 프로그램이 파일을 생성해야합니다. 먼저 파일의 내용을 문자열로 생성 한 다음 해당 문자열을 파일에 쓰거나 아니면 파일에 내용을 직접 추가해야합니까?문자열을 먼저 작성한 다음 파일에 써야합니까?
하나가 다른 것보다 장점이 있습니까?
파일의 크기는 약 0.5 - 1MB입니다.
파일을 쓰기 만하면 파일이 충분히 크고 끊임없이 스트림을 플러시하면 모든 것을 메모리에 보관하지 않아도됩니다.
그러나 단 한 번의 촬영이 아니라 일정 기간 동안 IO를 수행하고 있기 때문에 부분적으로 작성된 파일에 문제가 발생할 가능성이 더 큽니다.
필자는 개인적으로 StringBuilder를 사용하여 빌드 한 다음 디스크에 모든 내용을 한 번에 기록합니다.
부분적으로 쓰여진 파일이 문제라면, 한 가지 옵션이 있습니다. 임시 파일에 쓰고 파일이 준비되면 원하는 위치로 옮깁니다. 그렇게하면 두 가지 이점을 얻을 수 있습니다. 너무 많은 메모리를 저장하지 않으면 서 동시에 결과 파일이 일관성을 유지하는지 확인합니다. –
단일 샷으로 작성 ** ** 부분적으로 작성된 파일을 제공 할 수 있으므로 점진적으로 작성하지 않아야합니다. –
@Fredrik - true, @Rowland를 가져 오는 오류 처리 때문에 StringBuilder와 함께 사용하기는하지만 사실입니다. 또한 true 일 수도 있지만 1) 가능성이 낮고 2) 오류 처리가 필요합니다. 그 시나리오는 단일 장소에있을 수 있습니다. – jvenema
데이터를 저장하기 위해 string 또는 stringbuilder를 사용하는 것이 더 좋다고 생각합니다. File.Write 함수를 사용하여 파일에 쓸 수 있습니다.
그 주장을 뒷받침 할 수 있습니다 ... –
일반적으로 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
을 열고 작성하십시오. 당신은 그것이 당신의 출력 데이터에 맞게 너무 큰 것으로 나타났다 때 코드를 리팩토링 할 필요가 없습니다
나는 그것이 출력에 직접 가서 일반적으로 더 좋은 아이디어라고 생각 주된 이유
기억.StringBuilder
에 줄을 추가하는 API보다 깔끔합니다.
"파일 내용을 문자열로 생성 하시겠습니까?" – Rahul
기본적으로 하드 코딩 된 큰 부분을 가진 특정 형식의 파일로 변환되어야하는 거대한 사전이 있습니다. 그래서, 내가 갈 때 파일에 써야하는지, 아니면 먼저 모든 것을 stringbuilder에 쓰는지, 그리고 나서 내가 돔 인 파일에이 stringbuilder를 씁니다. – xbonez