Я пытаюсь автоматизировать дамп svnadmin с помощью C # 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 и использовать стандартныйOutputByteBuffer для записи в файл, но это тоже не работает. Я получаю другую ошибку о неправильном формате заголовка или чем-то подобном.