Verwenden der .NET-Assembly von WinSCP zum Hochladen einer Datei. OperationResultBase.Check()
werfen den folgenden Fehler:WinSCP: Wie kann sichergestellt werden, dass der SFTP-Upload von .zip.filepart in .zip umbenannt wird?
WinSCP.SessionRemoteException: Transfer was successfully finished, but temporary transfer file 'testfile.zip.filepart' could not be renamed to target file name 'testfile.zip'. If the problem persists, you may want to turn off transfer resume support.
Es scheint, dass dies mit jeder Zip-Datei passiert, dass ich zu senden versuchen. Wenn es einen Unterschied macht, sind dies ZIP-Dateien, die mit der DotNetZip-Bibliothek erstellt wurden.
Code, ich verwende, so ziemlich direkt aus dem Beispiel in der Dokumentation WinSCP genommen:
public void uploadFile(string filePath, string remotePath)
{
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
transferResult = currentSession.PutFiles(filePath, remotePath, false, transferOptions);
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
}
}
Discussion over at the WinSCP forum zeigt an, dass die Baugruppe noch nicht programmatische Steuerung der Übertragung resume Unterstützung ermöglichen. Gibt es einen Workaround dafür?
Mir scheint es seltsam, dass der Upload einen anderen Dateinamen verwendet als der Dateiname tatsächlich gewünscht wird. Hast du die Kontrolle darüber? – sarnold
@sarnold, aus der WinSCP-Dokumentation: "Wenn eine Datei mit SFTP-Protokoll übertragen wird, wird sie zuerst in eine temporäre Datei mit der Erweiterung .filepart übertragen. Erst nachdem die Übertragung abgeschlossen ist, wird die Erweiterung entfernt." – sigil
Wenn Sie Zugriff auf den Server haben, ist es möglich, etwas wie Process Monitor von SysInternals auszuführen, um zu sehen, was passiert, wenn der Upload der Datei abgeschlossen ist. Zum Beispiel könnte ein Antiviren-Programm die Datei in dem Moment scannen, in dem die Datei geschlossen wird, und trotzdem auf die Datei zugreifen, wenn das Umbenennen versucht wird. – sgmoore