Wie bekommen Sie Ihre Verzeichnisse, Datei-Größe von einer FTP-Protokoll .NET-Anwendung
Ich bin derzeit machen ein kleines .NET-Konsolenanwendung zu tun, eine automateed backup von einigen Dateien auf meinem server. Das Problem, das ich führe, ist, dass ich hatte einige schlechte Wetter an meinem Ende was führte zu einigen power-und Netzwerk-Ausfälle. Während dieser Zeit bemerkte ich, dass ein guter Teil meiner Dateien nicht durch oder wurden beschädigt. Ich Frage mich, ob es war ein Weg, um die Größe der Ordner auf dem anderen Ende und sehen, ob die Dateinamen, Anzahl der Dateien und Gesamtgröße des Verzeichnisses übereinstimmen. Ich habe versucht, WinSCP und NcFTP als Möglichkeiten zur übertragung von Dateien über, aber ich habe nicht gesehen, nichts in Bezug auf immer eine richtige Dateigröße.
Dies ist sehr viel, ein windows zu windows übertragen, also wenn es ein command-line-argument, das gibt mir wieder eine Größe, die durch die FTP-client-das wäre toll.
- Warum wählen Sie FTP? Sind Sie offen für andere Protokolle?
- Je nach die anderen Protokolle kann ich give it a shot. Ich habe nur getan, FTP-wegen der Geschwindigkeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt keine standard-Weg, um Anfrage "Gesamtgröße der Dateien in diesem Verzeichnis". Sie können Fragen, für jede Datei die Größe individuell über
SIZE file.txt
, oder Sie können Fragen, fürls -l
ein ganzes Verzeichnis und analysieren Sie die Datei-Größen aus.Gibt es keine standard-FTP-Befehl zum abrufen eines Verzeichnisses die Größe.
Müssen Sie rekursiv Durchlaufen aller Unterverzeichnisse und Dateien und die Summe der Umfänge.
Ist dies nicht einfach mit .NET framework/
FtpWebRequest
, als es keine Unterstützung für dieMLSD
Befehl, das ist der einzige tragbare Möglichkeit zum abrufen directory-listing mit dem Datei-Attribute im FTP-Protokoll.Alles, was Sie tun können, ist die Verwendung
LIST
Befehl (ListDirectoryDetails
) und versuchen zu analysieren, eine server-spezifische Liste. Viele FTP-Server mit *nix-Stil listing. Aber viele Server, die ein anderes format verwenden. Im folgenden Beispiel wird der *nix-format:Verwenden Sie es wie:
Wenn Ihr server mit DOS - /Windows-listing-format, siehe C# - Klasse zum Parsen WebRequestMethods.Ftp.ListDirectoryDetails FTP-Antwort
Alternativ können Sie eine 3rd-party-FTP-client-Implementierung das unterstützt die moderne
MLSD
Befehl.Beispielsweise WinSCP .NET-assembly unterstützt.
Und es hat sogar praktisch
Session.EnumerateRemoteFiles
Methode, die die Berechnung der Verzeichnisgröße leichte Aufgabe:Komplette code wäre wie:
(Ich bin der Autor von WinSCP)
Ich denke, Ihre beste Wette ist, erhalten Sie eine vollständige Liste der Dateien, und senden Sie Sie ein zu einer Zeit. Wenn die Verbindung nicht während der übertragung dann das hochladen der Datei schlägt fehl. Wenn ein Datei-upload ist erfolgreich, dann können Sie entfernen, dass die Datei-Namen aus der Liste.
wie Sie erwähnt haben NET in Ihren tags vielleicht sollten Sie schauen, hier für ein Beispiel, wie es in C#. VB.Net wird ähnlich sein, aber es wird Ihnen eine Idee geben.
Erhalten Sie eine Verzeichnis-Liste, wie gezeigt,hier.