Laden...

FTP Helper Klasse zum Zugriff auf FTP-Server

Erstellt von t2t vor 11 Jahren Letzter Beitrag vor 9 Jahren 13.418 Views
T
t2t Themenstarter:in
415 Beiträge seit 2007
vor 11 Jahren
FTP Helper Klasse zum Zugriff auf FTP-Server

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

T
t2t Themenstarter:in
415 Beiträge seit 2007
vor 11 Jahren

Ein Screenshot der Sample Anwendung:

E
180 Beiträge seit 2010
vor 11 Jahren

Super Sache aber ein Fehler ist mir bereits aufgefallen.
Sollten die Logindaten nicht stimmen oder der Server nicht erreichbar sein, wird eine unbehandelte Laufzeitexception geworfen. das könnte man noch abfangen und schöner verpacken. ansonsten supi.

Gruß

T
t2t Themenstarter:in
415 Beiträge seit 2007
vor 11 Jahren

Da hast du recht. Das Exception-Handling ist noch recht rudimentär und aktuell eher dem Verwender der Komponente überlassen eventuelle Fehler abzufangen. Ich behalte es aber mal im Hinterkopf da in Zukunft noch was nachzulegen.

A
8 Beiträge seit 2013
vor 9 Jahren

Hallo,

ich habe versucht diesen FTP in ein C# .Net Win-Form einzubauen, funktioniert wunderbar. Soweit ich ihn in Wind-Dienst einbaue, nachdem er in dem Ereignis OnStart() springt dann kommt er nicht wiederhin nach TimerZeit=1min Ablauf.

Hat jemand vielleicht eine Idee oder Erfahrung mit diesem FTPDataProvider

MFG
ati

T
t2t Themenstarter:in
415 Beiträge seit 2007
vor 9 Jahren

Ich weiß nicht, ob ich dich richtig verstanden habe. Du möchtest die Komponente in einem Windows-Dienst einsetzen? Ohne konkret zu wissen, was du da machst kann man nur raten was den Fehler auslöst. Eventuell stimmt was mit den Verbindungsdaten zu deinem Server nicht.

Am besten du machst einen eigenen Thread dazu auf und postest dort dein konkretes Problem einschließlich dem relevanten Quellcode.

A
8 Beiträge seit 2013
vor 9 Jahren

Hallo,

im Dienst funktioniert er jetzt.

Frage: beim FTPDataProvider.DownloadFile(...); ändert er den Erstellungsdatum des gedownloadeten Datei, wie kann ich dies vermeiden, daß er den Erstellungsdatum nicht ändert ?

MFG

T
t2t Themenstarter:in
415 Beiträge seit 2007
vor 9 Jahren

Das wird in der Tat so nicht berücksichtigt. Du könntest dir ne Methode schreiben, mit der du den Zeitstempel einer Datei auf dem Server auslesen kannst. Nach Beendigung des Downloads setzt du dann die ausgelesene Zeit in der neuen Datei.