Microsoft MVP성태의 닷넷 이야기
[질문] StreamReader.ReadLine사용시 position 문제 질문 [링크 복사], [링크+제목 복사]
조회: 3396
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
안녕하세요. 제목과 같이 StreamReader를 이용해 Text 파일을 핸들링하는 app를 개발중인 사람입니다.

 

각 Line별로 포맷이 일정치 않은 Text파일을 특정위치에 임의 접근해야 하는 상황이기 때문에,

 

처음 읽을 때, 제가 필요로 하는 특정 단어 발견시, 그 단어가 발견된 위치까지 읽은 bytes 수를 seek() 또는

 

position 프라퍼티를 참조하여 컬렉션에 저장해 놓고, 나중에 그 위치로 seek 하여 이동하는 방식을 사용하고

 

있습니다.

 

  문제는, ReadLine으로 읽어들일 때, Position값이 1024byte단위로만 움직이는 현상입니다. 예를들어,

 

 StreamReader sr = new StreamReader(.......);

 sr.BaseStream.Seek(0, SeekOrigin.Begin);

 

 string txt = sr.ReadLine();

 

 sr.BaseStream.Postion ==> 이값을 찍어보면 항상 1024가 나옵니다.

 

   1. 제가 기대했던 것은 ReadLine하여 읽은 1라인에 포함된 문자열의 byte 수만큼만 position이

      이동한다고 예상.(1라인의 문자열 길이가 일정치 않음)

   2. 하지만 실제로는 1024단위로 position을 변경시키고, 1024안에 포함된 line만큼 찍은 후 2048로 바뀝니다.(1024배수로 커짐)

       한line에 포함된 글자수가 제각각이라서 1024 만큼의 포지션 이동 할때 마다 찍는 line수도 당연히 제각각입니다.

 

   3. 결론적으로, readline으로 읽어들인 만큼만 position 값을 정확히 받아올 방법이 없는지 궁금합니다. 혹시 Stream의

      어떤 자체적인 특성때문은 아닌지 모르겠네요.

       -->Visual Basic에서는 Line Input/ Seek메소드를 사용하면 읽은 line의 byte만큼만 정확히 반환됩니다.

 







[최초 등록일: ]
[최종 수정일: 7/30/2006 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

비밀번호

댓글 쓴 사람
 



2020-08-11 08시18분
[용용] 문의 주신 내용을 저도 동일하게 고민했었는데요, streamreader 의 readline 이 우리가 예상하는 것처럼 포인터의 위치를 정확히 라인의 끝부분에서 돌려주지 않는다는 문제가 있더군요.
아래 페이지를 보면 정확하게 찾는 방법이 있습니다. 스택오버플로우에서 가져온 것 같네요.
https://diy-dev-design.tistory.com/139

[손님]
2020-08-11 08시39분
[답변]: 내부적으로 Buffer 를 사용하기 때문입니다.
; https://www.sysnet.pe.kr/3/1/75

정성태

[1]  2  3  4  5  6 
NoWriterDateCnt.TitleFile(s)
140정성태11/17/20117667[질문] ArrayList 를 반환하는 WCF 메서드의 경우 System.ServiceModel.CommunicationException 예외 생성
141정성태11/17/20116111    답변글 [답변]: ServiceKnownType을 명시해 보세요.
138정성태11/17/20115404[질문] backgroundWorker 안에서 Timer 안도나요
139정성태11/17/20115359    답변글 [답변]: Invoke 로 호출해 보세요.
133정성태10/1/20076605[질문] ASP 의 ByVal 과 ByRef 특성
134정성태10/1/20078744    답변글 [답변]: ASP 의 ByVal 과 ByRef 특성
129정성태5/1/20077213[질문] C# COM Server에서 C++ Client에게 string맴버 포함한 구조체 배열 넘기기)
130정성태5/1/20078121    답변글 [답변]: C# COM Server에서 C++ Client에게 string맴버 포함한 구조체 배열 넘기기)
126정성태8/4/20066692[외부] Debugging When Property Reads Have Side Effects
124정성태7/29/20066771[질문] IE프로그래밍 관련하여 질문이
125정성태7/29/20066988    답변글 [답변]: IE프로그래밍 관련하여 질문이
122정성태7/29/20067002[질문] 어떤식으로 프로그램을 짜야 singlecall이고 singleton인가요?
123정성태7/29/20066615    답변글 [답변]: 활성 모드의 차이인데요...
120정성태7/29/20067040[질문] "주석 웹페이지 빌드" 2005 에 어디 있나요?
121정성태7/29/20066460    답변글 [답변]: Web Site Project 유형에서는 제공되지 않습니다.
118정성태7/29/20067859[질문] 웹서비스에 대한 몇가지 질문.. [1]
119정성태7/29/20066736    답변글 [답변]: 아는 데로 답변을 드리면.
116정성태7/29/20067605[질문] SmartClient에서 Server.UrlDecode를 사용할 수 있을까요?(한글쿠키문제)
117정성태7/29/20066731    답변글 [답변]: 한글 문제 때문이라면...
114정성태7/29/20067025[질문] 빌드와 리빌드의 차이가 뭡니까?
115정성태7/29/200610568    답변글 [답변]: [질문] 빌드와 리빌드의 차이가 뭡니까?
112정성태7/29/20066584[질문] ObjectDataSource에서 파라메터가 있는 생성자 호출법??
113정성태7/29/20066827    답변글 [답변]: 물론 있을테죠. ^^
110정성태7/29/20067512[질문] 접두사를 포합한 XML을 읽을려고 합니다~
111정성태7/29/20067748    답변글 [답변]: 정형화된 틀이 있습니다.
[1]  2  3  4  5  6