2009-12-18 3 views
0

sharpsvn을 사용하여 diff 메서드를 구현하려고합니다. 내 코드Sharpsvn diff 메서드가 작동하지 않습니다.

private void Diff(string pSourcePath) 
{ 
     Uri UriSCPath = new Uri(pstrSourcePath); 
     SvnClient DPISVN_Clnt = new SvnClient(); 

     DPISVN_Clnt.Authentication.DefaultCredentials = new NetworkCredential("Biju","Biju"); 
     try 
     { 
      SvnRevisionRange objSvnRevisionRange=new SvnRevisionRange (17157,17161); 
      Stream stream=null; 
      MemoryStream objMemoryStream = new MemoryStream(); 
      bool b = DPISVN_Clnt.Diff(pstrSourcePath, objSvnRevisionRange, objMemoryStream); 

      StreamReader strReader = new StreamReader(objMemoryStream); 
      string str = strReader.ReadToEnd(); 
} 

내 첫 번째 문제를 다음과 같이이 DIFF 방법은 항상 내 프로그램을 운용에서 true를 반환하고 또한 true를 돌려보다 내 revison 범위를 변경할 수 있습니다.

두 번째 문제점은 diff 메소드에 입력 매개 변수 이름 stream result가 있습니다. 결과 스트림 정보가 포함되어 있다고 생각합니다. streamreader를 사용하여 결과 스트림의 내용을 읽으려고하면 빈 문자열이 반환됩니다.하지만 내 리비전 범위가 다르고 내 소스 파일에 약간의 차이가 있습니다.

스트림을 사용하는 동일한 방법이 있습니까?

+3

SharpSVN을 모르겠지만 메모리 스트림에 쓰는 중이라면 스트림 포인터가 끝에 위치 할 수 있습니다. 판독기를 설정하기 전에 MemoryStream.Seek (0, SeekOrigin.Begin)을 호출 해보십시오. – itowlson

+0

또한 diff 파일의 전체 경로를 작성하므로 절대 경로를 열어야합니다. –

답변

5

itowlson이 이미 그의 코멘트에 답변 한대로 SharpSvn은 diff를 스트림에 씁니다. 그래서 함수가 돌아 오면 작성된 diff 바로 뒤에 있습니다.

그리고 .ReadToEnd()은 현재 위치에서 끝까지 모든 것을 읽습니다. 도움이해야 StreamReaders을 만들기 전에

stream.Position = 0; 

(또는 탐색)를 사용하여

.

이렇게하면 통일 된 diff가 제공됩니다. diff 파일을 실제로 수행하려면 두 파일 버전이 모두 필요하면 SvnClient.Write()을 별도의 대상으로 사용할 수 있습니다.

관련 문제