Ich verwende Librsync in einem Projekt, um die Unterschiede zwischen zwei Versionen einer Datei zu berechnen und die Änderungen auf die alte Datei anzuwenden.Stream.CopyTo hängt bei Verwendung mit Librsync.PatchStream
Außerhalb meines Projekts habe ich es in einer einfachen Konsole App funktioniert, die die Dateien aus 2 verschiedenen Verzeichnissen liest, "Patches" sie und schreibt es in ein gepatchtes Verzeichnis.
Codebeispiel -
using (var deltaFile = new FileStream(tmpDeltaFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
{
//myClient is the client of a WCF service I created
myClient.ComputeDelta(file.Id, signatureStream).CopyTo(deltaFile);
originalFile.Seek(0, SeekOrigin.Begin);
deltaFile.Seek(0, SeekOrigin.Begin);
var patchedStream = Librsync.ApplyDelta(originalFile, deltaFile);
using (var patchedFileStream = new FileStream(patchedFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
{
//Code below just hangs. patchedStream pos = 0 and the length is the same as that of the new file.
patchedStream.CopyTo(patchedFileStream);
}
}
Pausieren Sie den Debugger und buchen Sie den Call-Stack der Hand mit externem Code. – usr
Hangs auf - 'public override int Read (byte [] buffer, int offset, int count) { return ReadAsync (Puffer, Offset, count) .RESULT; } ' in PatchedStream.cs https://github.com/braddodson/librsync.net/blob/master/librsync.net/PatchedStream.cs – chickenbeef
Die' .Result' Ding sieht aus wie eine klassische ASP. NET Deadlock. Es ist ein Fehler in unbekanntem Code. Wickle das Ganze in 'Task.Run (() => ...). Wait();' um das zu testen. – usr