2009-12-18 42 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方法总是返回我program.I真正改变了我的修订时的范围比也返回true。

我的第二个问题是在diff方法中有一个输入参数名称流结果。我认为它包含结果流信息。当我尝试使用streamreader读取结果流的内容时,它会返回空字符串。但是,我的revison范围不同,并且在我的源文件中存在一些差异。

与使用流的方式相同吗?

+3

我不知道SharpSVN,但是如果它正在写入该内存流中,它可能已经将流指针留在最后。在设置阅读器之前,尝试调用MemoryStream.Seek(0,SeekOrigin.Begin)。 – itowlson 2009-12-18 06:15:37

+0

它也写完整路径diff文件,所以我必须打开它并修剪绝对路径。 – 2012-08-07 13:51:49

回答

5

正如itowlson在他的评论中已经回答的那样,SharpSvn将di​​ff写入流中。所以当函数返回时,你恰好落后于书面差异。

.ReadToEnd()读取从当前位置到结束的所有内容,这很可能不是什么。

创建StreamReaders应该帮助之前使用

stream.Position = 0; 

(或搜索)。

这会给你一个统一的差异。如果您确实需要这两个版本的文件(自己执行差异),则可以使用单独目标的SvnClient.Write()