Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
FTP Helper Klasse zum Zugriff auf FTP-Server
t2t
myCSharp.de - Member



Dabei seit:
Beiträge: 436
Herkunft: Hamburg

Themenstarter:

FTP Helper Klasse zum Zugriff auf FTP-Server

beantworten | zitieren | melden

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
Attachments
private Nachricht | Beiträge des Benutzers
t2t
myCSharp.de - Member



Dabei seit:
Beiträge: 436
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

Ein Screenshot der Sample Anwendung:
Attachments
private Nachricht | Beiträge des Benutzers
Equilibrium
myCSharp.de - Member



Dabei seit:
Beiträge: 190

beantworten | zitieren | melden

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ß
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Equilibrium am .
private Nachricht | Beiträge des Benutzers
t2t
myCSharp.de - Member



Dabei seit:
Beiträge: 436
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
ati_sah
myCSharp.de - Member



Dabei seit:
Beiträge: 9

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
t2t
myCSharp.de - Member



Dabei seit:
Beiträge: 436
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
ati_sah
myCSharp.de - Member



Dabei seit:
Beiträge: 9

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
t2t
myCSharp.de - Member



Dabei seit:
Beiträge: 436
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers