2009-12-18 4 views
0

J'essaie d'implémenter la méthode diff en utilisant sharpsvn. Mon extrait de code comme suitLa méthode diff de Sharpsvn ne fonctionne pas

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(); 
} 

Ma première question est la méthode Diff retourne toujours vrai dans mon program.I a changé ma gamme de Revison que aussi il retourne vrai.

Mon deuxième problème est dans la méthode diff avec un résultat de flux de noms de paramètres d'entrée. Je pense qu'il contient des informations de flux résultantes. Lorsque j'essaie de lire le contenu d'un flux de résultats en utilisant streamreader, il renvoie une chaîne vide. Mais ma zone de révision est différente et il y a une certaine différence dans mon fichier source.

Est-ce la même manière d'utiliser un flux?

+3

Je ne connais pas SharpSVN, mais s'il écrit dans ce flux de mémoire, il peut avoir laissé le pointeur de flux positionné à la fin. Essayez d'appeler MemoryStream.Seek (0, SeekOrigin.Begin) avant de configurer le lecteur. – itowlson

+0

Il est également écrit le chemin complet vers le fichier diff, donc je dois l'ouvrir et couper le chemin absolu. –

Répondre

5

Comme itowlson a déjà répondu dans son commentaire, SharpSvn écrit le diff dans le flux. Ainsi, lorsque la fonction revient, vous êtes juste derrière le différentiel écrit.

Et .ReadToEnd() lit tout de la position actuelle à la fin, ce qui est probablement rien.

L'utilisation d'un

stream.Position = 0; 

(ou Seek) avant de créer les StreamReaders devraient aider.

Cela vous donnera un diff unifié. Si vous avez vraiment besoin des deux versions du fichier (pour effectuer le diff vous-même), vous pouvez utiliser SvnClient.Write() des cibles séparées.

Questions connexes