Hallo zusammen,
im Rahmen einer meiner letzten Projekte ist eine FTP-Wrapper Klasse entstanden, welche Funktionalitäten aus dem System.Net-Namespace kapselt, um so auf FTP-Server zugreifen zu können. Ich habe diese Klasse nun etwas aufbereitet und zusammen mit einem recht simplen FTP-Client als Sample für euch zur Verfügung gestellt.
Für mich galt besondere Aufmerksamkeit auf den Up- und Download-Methoden, da ich die Möglichkeit haben wollte in meiner GUI den User über Prozessfortschritt, Datendurchsatz und Restzeit zu informieren. Also habe ich im Grunde die Funktionalitäten aus meiner anderen Komponente
CopyComponent zum Kopieren von Dateien mit Fortschritts-, Datendurchsatz-, und Restzeitberechnung auch hierauf übertragen. Nach dem abonnieren des FtpProgressChanged-Events erhält man detaillierte Informationen über den Up- bzw. Download Vorgang.
Insgesamt verfügt die Komponente über folgende Methoden:
• UploadFile: Läd eine Datei auf den FTP-Server. Informationen zum Upload-Prozess erhält man über das Event FtpProgressChanged
• DownloadFile: Läd eine Datei vom FTP-Server herunter. Informationen zum Download-Prozess erhält man über das Event FtpProgressChanged
• GetDirectoryDetailList: Liefert eine Liste von Ordnern und Dateien zurück, die sich in einem bestimmten Verzeichnis auf dem Server befinden
• GetDirectoryList: Liefert eine Liste des Verzeichnis Inhalts zurück, zu einem Pfad
• GetFileSize: Emittelt die Größe einer Datei in Bytes
• DeleteFile: Löscht eine Datei
• DeleteDirectory: Löscht ein Verzeichnis
• Move: Verschiebt eine Datei oder einen Ordner.
• DirectoryOrFileExists: Überprüft, ob auf dem FTP Server ein Verzeichnis oder eine Datei zum absoluten Pfad existiert.
• CreateFolder: Erstellt ein neues Verzeichnis
Zwei Anmerkungen noch:
1.) Die Up- und Download-Methoden verwenden als (optionale) Parameter das CancellationTokenSource, welche erst ab .NET 4.0 bereitstehen. Mit dem CancellationTokenSource können asynchrone Aufrufe abgebrochen werden. Wer die Komponente in einer älteren .NET Version nutzen möchte, kann relativ leicht diesen Token entfernen.
2.) Die Methode GetDirectoryDetailList kann unter Umständen nicht auf allen FTP-Servern das gewünschte Ergebnis erzielen. Das liegt daran, dass der LIST-Befehl keine standardisierte Antwort zurückgibt. Ggf. muss die Methode dann erweitert werden. Wer dies tut ist herzlich dazu eingeladen seine Verbesserungen mir mitzuteilen, damit ich ein Update herausgeben kann.
Generell bin ich sehr offen für Fragen, Vorschläge und Verbesserungen und freue mich über jedes Feedback. Bei konstruktiver Kritik bin ich sehr gewillt die Komponente stetig zu verbessern, damit hier ein gut funktionierendes Werkzeug für den Zugriff auf FTP-Server bereit steht.
Schlagwörter: FTP, FTP-Server, Upload, Download, Restzeit, Datendurchsatz, Prozessfortschritt