2016-04-04 14 views
2

Ich versuche, eine Synchronisierung von Dateien vom Remotestandort zum lokalen Pfad unter Verwendung der WinSCP .NET-Bibliothek durchzuführen, so dass Dateien Neue oder aktualisierte Dateien im Quellordner werden in das Ziel heruntergeladen und Dateien im Ziel, die aus dem Quellordner entfernt wurden, werden vom Ziel gelöscht.WinSCP .NET SynchronizeDirectories löscht lokale Dateien nicht, nachdem sie aus dem Remote-Ordner entfernt wurden

Der Aufruf ausgewertet wird so zu etwas zu synchronisieren:

var fileMask = "/FTP_root/Folder_*/*.png>2016-01-01 00:00:00"; 
var results = session.SynchronizeDirectories(SynchronizationMode.Local, 
              @"C:\ProjectFolder\AppData", 
              FTPDirectory, 
              true, 
              false, 
              SynchronizationCriteria.Time, 
              new TransferOptions() { FileMask = fileMask }); 

Zur Erinnerung, die Parameter für SynchronizeDirectories sind:

SynchronizationMode 
LocalPath 
RemotePath 
RemoveFiles 
Mirror 
SynchronizationCriteria 
TransferOptions 

Was ich mit diesem Code zu finden bin ist, dass neue und umbenannte Dateien werden wie erwartet heruntergeladen, aber Dateien, die aus dem Remote-Ordner entfernt wurden, werden nicht gelöscht, und bei umbenannten Dateien befinden sich der alte und der neue Dateiname nach der Synchronisierung im lokalen Ordner.

Antwort

3

Die Synchronisation wendet die Dateimaske sowohl auf den Remote- als auch auf den lokalen Pfad an, um in beiden Richtungen festzustellen, welche Dateien für die Synchronisation geeignet sind.

Die entsprechenden Abschnitte der Dateimaske Dokumentation (https://winscp.net/eng/docs/file_mask) sind:

  • „Für ein Teilpfad Maske macht es keinen Unterschied, ob Sie() oder Schrägstriche (/) verwenden zurück, die Maske immer für Arbeit sowohl lokale als auch Remote-Pfade „

  • ‚Du auch vollständigen Pfad zu einer bestimmten Datei oder das Verzeichnis, sowohl lokale als auch remote‘

  • “ Der vollständige Pfad Maske entspricht einem lokalen oder eine remot angeben e Pfade nur, Syntax in Abhängigkeit von „

In diesem Fall verwendet wird, scheint es, dass eine vollständige Pfadmaske unter Verwendung der Maske nur auf den Remote-Pfad angelegt werden soll, zu verursachen. Damit die Synchronisation neue Dateien, Umbenennungen und Löschungen unterstützt, sollte die Pfadmaske sowohl entfernt als auch lokal übereinstimmen, entweder unter Verwendung eines relativen Pfades, z.

var fileMask = "*/Folder_*/*.png"; 

oder durch eine Maske enthält, die zusätzlich Spiele lokal remote:

var fileMask = @"C:\ProjectFolder\AppData\Folder_*\*.png; /FTP_root/Folder_*/*.png; 

Ich habe nur getestet kurz den zweiten Ansatz, aber es scheint auch für erforderliche Größe mit einigen Überlegungen (wenn auch zu arbeiten und Zeitbeschränkungen in der Maske). Der Ansatz des relativen Pfads funktioniert in meinen Umständen, obwohl er dem vollständigen Pfadansatz nicht genau entspricht (da er auch Ordner in der Verzeichnishierarchie abgleichen kann).

Verwandte Themen