2015-01-04 4 views
1

나는 파일 형식을 만드는 프로그램을 작성합니다. 사양에 따르면 같은 줄의 문자열이 얼마나 오래있을 수 있는지와 줄의 시작 위치에 제한이있는 구분 된 요소가 있어야합니다.텍스트 파일에 쓰고 특정 위치에서 시작

예를 들어.

텍스트 파일을 쓰려고합니다.

첫 줄에는 첫 줄의 0 위치에서 시작하여 총 개수가 10 인 공간을 만드는 "TEST1"문자열이 표시되어야합니다. 따라서 문자열 뒤에 5 칸이 생깁니다.

11 번째 줄에 같은 줄에 "TEST2"라고 쓰면 전체 카운트가 10이되므로 문자열 뒤에 5 칸이 생깁니다.

"TEST1"및 "TEST2"문자열은 언제든지 1-10 자까지 변경할 수 있습니다.

내가 및 String.format을 시도했다 ("{0,10}"과 그게 내가 찾고 있어요되지 것을 10 위치에 끝이 아니라 할 수 있습니다.

이것은 FNMA 파일입니다 수 있습니다 나타납니다.

+1

File.Seek() 메서드를 사용하여 쓰기를 시작할 위치를 설정하십시오. – erem

+0

'String.Format ("{0, -10}", ...)'시도해 보거나, 'StreamWriter'와 같은 메소드입니다. 그러나 문자열이 지정된 너비보다 길면 다음 필드가 모두 오버플로되고 잘못 정렬됩니다. –

+0

모든 문자가 ASCII 또는 UTF-16과 같은 바이트 수인 인코딩을 사용하도록 결정해야합니다. UTF-8을 사용하면 얼마나 많은 바이트 10 문자를 가져올 지 예상 할 수 없습니다. – RenniePet

답변

0

당신은 aready 제안 방법을 사용할 수 있지만 같으면 파일이 UTF-8 형식 인 경우 당신이 UTF8Encoding.GetPreamble Method으로 얻을 수있는 UTF-8 BOM (header)을 건너 뛸 필요가 알아야 및 인코딩 생성자 true을 전달하는 것은 당신에게 기본적으로 수를 변경할 수 없기 ' ASCII 파일의 경우 오프셋은 0입니다.

var value = string.Format("{0,-10}", "TEST33"); 

FileStream fs = File.OpenWrite("test.txt"); 

System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(true); 
int preamble = enc.GetPreamble().Length; 
var bytes = enc.GetBytes(value); 

fs.Seek(preamble, SeekOrigin.Begin); 
fs.Write(bytes, 0, bytes.Length); 

fs.Close(); 
관련 문제