我想使用C#ProcessStartInfo自動化svnadmin轉儲。閱讀System.Diagnostics.ProcessStartInfo標準輸出爲字節,而不是字符
我已經做到了在命令行的方式是像這樣,
svnadmin dump c:\Repositories\hackyhacky > c:\backup\hackyhacky.svn_dump
作品一種享受,併成功地轉儲,我可以恢復到另一個倉庫,像這樣
驗證這一點svnadmin load c:\Repositories\restore_test < c:\backup\hackyhacky.svn_dump
恢復成功 - 耶!
現在......我需要複製的命令行管道將使用C#另一個文件,但由於某種原因
var startInfo = new ProcessStartInfo(Path.Combine(SvnPath, "svnadmin"),"dump c:\Repositories\hackyhacky")
{CreateNoWindow = true, RedirectStandardOutput = true,RedirectStandardError = true,UseShellExecute = false};
process.StartInfo = startInfo;
process.Start();
StreamReader reader = process.StandardOutput;
char[] standardOutputCharBuffer = new char[4096];
byte[] standardOutputByteBuffer;
int readChars = 0;
long totalReadBytes = 0;
// read from the StandardOutput, and write directly into another file
using (StreamWriter writer = new StreamWriter(@"C:\backup\hackyhacky.svn_dump", false)) {
while (!reader.EndOfStream) {
// read some chars from the standard out
readChars = reader.Read(standardOutputCharBuffer, 0, standardOutputCharBuffer.Length);
// convert the chars into bytes
standardOutputByteBuffer = reader.CurrentEncoding.GetBytes(standardOutputCharBuffer);
// write the bytes out into the file
writer.Write(standardOutputCharBuffer.Take(readChars).ToArray());
// increment the total read
totalReadBytes += standardOutputByteBuffer.Length;
}
}
轉儲同一回購成hackyhacky.svn_dump。
但是當我現在運行我的負荷命令行
svnadmin load c:\Repositories\restore_test < c:\backup\hackyhacky.svn_dump
我得到一個校驗和錯誤奇怪的錯誤!
svnadmin load c:\Repositories\restore_test < c:\backup\hackyhacky.svn_dump
< Started new transaction, based on original revision 1
* adding path : Dependencies ... done.
* adding path : Dependencies/BlogML.dll ...svnadmin: Checksum mismatch, fil
e '/Dependencies/BlogML.dll':
expected: d39863a4c14cf053d01f636002842bf9
actual: d19831be151d33650b3312a288aecadd
我猜這是關於如何重定向和閱讀StandardOutput。
有誰知道正確的方式來模仿C#中的命令行文件管道行爲?
任何幫助,非常感謝。
-CV
UPDATE
我使用的BinaryWriter和使用standardOutputByteBuffer寫入文件試過,但也不管用。我收到關於錯誤標題格式或其他內容的錯誤。
謝謝斯蒂芬,我在當前的代碼中寫有char數組。我試着將字符切換成字節並寫入。這兩種方法都不起作用,併產生不同的錯誤 – CVertex 2010-08-15 09:48:52