2011-04-19 6 views
4

StreamReader를 다시 사용하고 싶습니다. System.Xml.XmlReader에서 호출 한 .Read()에 대한 XML 파일과 연결되어 있습니다.여러 개의 XmlReader.Read() 용으로 StreamReader를 재설정합니다.

public static string GetValueByPath(this StreamReader str, string attributeName, params string[] nodes) 
    { 
     str.BaseStream.Position = 0; 
     XmlReader reader = XmlReader.Create(str); 
     // Stuff happens here now, not important for the question 
    } 

이 확장 메서드를 호출에서는 StreamReader 전체 세션에 걸쳐 동일하게 유지 :

기본적으로 내가 함께 다음 코드를 특징으로 작은 확장 방법을 넣었습니다.

처음에는 정상적으로 작동하지만 두 번째로이 메서드를 사용하면 System.Xml-Exception이 수신됩니다. StreamReader를 효과적으로 "재설정"할 수있는 방법이 있습니까? StreamReader가 기본이되는 스트림의 데이터를 버퍼링 때문에

감사합니다,

데니스

답변

5

당신은 단지의 BaseStream의 위치를 ​​변경할 수 없습니다. 그것은 단지 StreamReader의 행동을 엉망으로 만들 것이고, 좋은 결과는 나오지 않을 것입니다.

이전 StreamReader을 폐기하고 대신 새 것을 새로 만들어야합니다.

+0

답장을 보내 주셔서 감사 드리며, 두려웠습니다. 불필요하게 코드를 부풀리지 않고 ASP 웹 응용 프로그램에서이 작업을 수행하는 방법을 알고 있지 않습니까? –

+0

@Dennis, 무슨 뜻인지 확실하지 않습니다 ... 나는 당신의 코드를 보지 않고서는 대답 할 수 없습니다. –

2

StreamReader은 값 비싼 객체가 아니기 때문에 기본 스트림이 위치 설정을 지원하는 한 매번 새로운 StreamReader을 만들어야합니다.

0

메서드 끝에 추가 했습니까?

reader.Close(); 

독자가 다음 읽는 데 문제가되는 올바르게 닫히지 않았을 수 있습니다.

0

버퍼링 중이므로 위치를 재설정하는 것 외에도 버퍼를 삭제해야합니다.

  sr.BaseStream.Position = 0; 
      sr.DiscardBufferedData(); 

내가 (1 패스 카운트 라인, 2 패스 구문 분석 및 저장 결과를) 구문 분석하려고 해요 파일에 얼마나 많은 줄 알고 싶을 때이 작업을 완료했습니다.

관련 문제