C#: Datei via FTP hochladen
Da ich gerade dabei bin, hier direkt das nächste kleine Tutorial: Ihr möchtet eine Datei über einen Euch bekannten FTP hochladen. Dazu benutzen wir hier den FtpWebRequest, der es uns ermöglicht einen Stream zum FTP aufzubauen und über diesen jede beliebige Datei hochzuladen.
Dieser Prozess ist allerdings kein asynchroner Prozess, daher werdet Ihr keinen wirklichen Fortschritt sehen, wenn Ihr die folgenden Codezeilen ausführt. Das heißt, er lädt die Datei ersteinmal komplett hoch, bevor er mit dem weiteren Code fortfährt.
Um diese Problematik zu umgehen, solltet Ihr einen eigenen Thread oder den BackgroundWorker bemühen und diesen dann async (also asynchron) aufrufen. Dann wird dieser Prozess im Hintergrund ausgeführt, während Eure Applikation die weiteren Schritte durchläuft. Aber auch hierzu wird es in Kürze ein Tutorial geben.
using System.Net;
try
{
// Pfad zur neuen Datei
string ftp = @"ftp://meinserver.de/pfad/libsmods.zip";
// FtpWebRequest initialisieren
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(ftp));
// Methode auswählen (hier UploadFile)
request.Method = WebRequestMethods.Ftp.UploadFile;
// Benutzername und Passwort übergeben
request.Credentials = new NetworkCredential("Username", "Password");
// Verbindung überprüfen
WebResponse response = request.GetResponse();
// Datei zum Upload auswählen und in FileStream schreiben
FileStream fs = new FileStream(@"C:\test.zip", FileMode.Open);
byte[] fileContents = new byte[fs.Length];
fs.Read(fileContents, 0, Convert.ToInt32(fs.Length));
fs.Flush();
fs.Close();
// Stream zum FTP aufbauen
Stream requestStream = request.GetRequestStream();
// Datei via Stream schreiben
requestStream.Write(fileContents, 0, fileContents.Length);
// Stream beenden
requestStream.Close();
// Verbindung beenden
request.Abort();
}
catch (Exception ex)
{
MessageBox.Show(ex.message, "Error");
}