usando el command svn diff en el código

Hola, tengo un problema al usar el command svn en el código detrás:

public void SvnDiff(int rev1, int rev2) { try { var p = new Process(); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.FileName = "svn"; string arg = string.Format("diff -r {0}:{1} --summarize --xml > SvnDiff.xml", rev1, rev2); Console.WriteLine(arg); p.StartInfo.Arguments = arg; p.Start(); p.WaitForExit(); } catch (Exception e) { Console.WriteLine(e); } } 

Cuando uso este command en cmd, funciona bien. svn diff -r 2882: 2888 –summarize –xml> SvnDiff.xml

pero cuando ejecuto mi método, recibí este post: svn: E020024: Error al resolver el caso de '>'

¿Qué puedo hacer ahora para resolver esto? Gracias por cualquier consejo

La parte > SvnDiff.xml de su command-line no son arguments pasados ​​a SVN. Están networkingirigiendo la salida estándar. Para hacer eso, eche un vistazo a la documentation :

Como ya tiene RedirectStandardOutput configurado correctamente, solo necesita aprovecharlo. Simplemente pon

 string output = p.StandardOutput.ReadToEnd(); 

frente a tu p.WaitForExit(); línea.

Luego, simplemente use File.WriteAllText("SvnDiff.xml", output);

Puede leer todo el text y luego escribir en el file como se sugirió @Scott, pero puede ser problemático si el resultado es demasiado grande.

En su lugar, puede escribir a medida que se genera la salida. Cree un StreamWriter local para el file y un método para escribir siempre que haya nuevos datos de salida disponibles:

 StreamWriter networkingirectStream = new StreamWriter("SvnDiff.xml") void Redirect(object Sender, DataReceivedEventArgs e) { if ((e.Data != null)&&(networkingirectStream != null)) networkingirectStream.WriteLine(e.Data); } 

y cuando comienzas el process:

 p.OutputDataReceived += new DataReceivedEventHandler(Redirect); // handler here to networkingirect p.Start(); p.BeginOutputReadLine(); p.WaitForExit(); networkingirectStream.Flush(); networkingirectStream.Close(); 

Prueba con esto …

 var p = new Process(); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.FileName = "cmd.exe"; string arg = string.Format("/K svn diff -r {0}:{1} --summarize --xml > SvnDiff.xml", rev1, rev2); Console.WriteLine(arg); p.StartInfo.Arguments = arg; p.Start(); p.WaitForExit(); 

si funciona, cambia / K con / C

Gracias por las respuestas, uso StandardOutput y funciona 🙂

 var p = new Process(); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.FileName = "svn"; p.StartInfo.Arguments = string.Format("diff -r {0}:{1} --summarize --xml", rev1, rev2); p.Start(); string output = p.StandardOutput.ReadToEnd(); p.WaitForExit(); File.WriteAllText("SvnDiff.xml", output); 

Gracias por todos ustedes