2010-01-22 6 views
3

파일의 마지막 문자를 가져와야합니다. 줄 바꿈 또는 많은 특수 문자 중 하나 일 수 있습니다. 전체 파일을 파싱하지 않고이 문자를 검색 할 수 있습니까? 아니면 줄 바꿈에 대한 걱정없이 전체 파일을 문자열로 읽을 수있는 방법이 있습니까?줄 단위로 읽지 않고 파일의 마지막 문자를 검색하는 방법이 있습니까?

기본적으로 파일의 마지막 문자를 기반으로 파일의 내용을 분할해야합니다. 그래서 줄 바꿈이라면 문자열을 '\ n'으로 나눌 것입니다.

답변

4
string s = File.ReadAllText("test.txt"); 
string[] split = s.Split(s[s.Length - 1]); 
+0

이것은 전체 텍스트에서도 마지막 쪼개짐을 유지합니다 ... 쪼개기 전에 이것을 먼저 제거해야합니다! – Toad

+0

마지막 문자가 텍스트에 남아 있으면 상관 없습니다. 그것은 유효한 EDI 형식입니다. – Brandon

+0

@brandon :이 경우의 예는 정확합니다. – Toad

0

StreamReader에는 ReadToEnd() 메서드가 있습니다. 전체 파일을 문자열로 읽습니다.

+0

마지막 문자를 가져 오는 데 시간과 메모리를 소비하는 방식이 아닙니까? –

+0

@ 파스칼 : 질문을 다시 읽는 것이 좋습니다. OP는 마지막 문자와 관계없이 파일의 전체 내용을 가져야하므로보다 효율적인 경로가됩니다. –

+0

맞아, 나는 "전체 파일을 파싱하지 않고"부분에 집중하고 있었다. 끝에서 찾다가 처음에는 다시 메모리에 들어 가지 않는 파일을 처리 할 수 ​​있습니다. –

7

파일 -1의 끝에 Seek() 한 다음 1 바이트 만 Read() 할 수 있습니다.

현재 정확한 기능 이름과 상수가 Seek에 없으므로 Stream 설명서에서 해당 기능을 확인하십시오.

+2

1 바이트는 1 문자와 같지 않을 수 있습니다. 파일 인코딩에 따라 다를 수 있습니다. –

+0

System.IO.Stream.Seek (-1, System.IO.SeekOrigin.End) .ReadByte() – TJMonk15

+1

어쨌든 전체 파일을 읽는다면 실제로 스트림을 조작 할 필요가 없습니다. –

관련 문제