Vor kurzem hab ich einen FTP-Datentransfer innerhalb eines C# Programmes benötigt, nach etwas Gehirnschmalzvernichtung ist dieses nichtssagende, undokumentierte Stück Code rausgekommen. Nichts besonderes, keine ausgefuchste Fehlerbehandlung, keine Spezialfunktionen, keine ausführlichen Tests durchlaufen – wozu auch, es läuft ja. 😉
Zur meiner Entschuldigung muss ich auch vorbringen, dass das ja nur der erste Schuss ist – zumindest bevor es produktiv geht, sollten zumindest noch ein paar Fehlerbehandlungsroutinen da reinwachsen.
using System; using System.Net; using System.IO; class FTP { private string ftpServerIP; private string ftpUserName; private string ftpPassWord; public FTP(string serverIP, string userName, string passWord) { this.ftpServerIP = serverIP; this.ftpUserName = userName; this.ftpPassWord = passWord; } public bool Upload(string fileName) { FileInfo fi = new FileInfo(fileName); string uri = "ftp://" + ftpServerIP + "/" + fi.Name; FtpWebRequest ftpRequest = CreateRequest(uri, WebRequestMethods.Ftp.UploadFile); ftpRequest.ContentLength = fi.Length; int buffLength = 2048; byte[] buff = new byte[buffLength]; int count; bool result = false; using (FileStream fileStream = fi.OpenRead()) { Stream ftpStream = ftpRequest.GetRequestStream(); count = fileStream.Read(buff, 0, buffLength); while (count > 0) { ftpStream.Write(buff, 0, count); count = fileStream.Read(buff, 0, buffLength); } ftpStream.Close(); fileStream.Close(); result = true; } return result; } public bool Download(string filePath, string fileName) { string uri = "ftp://" + ftpServerIP + "/" + fileName; FtpWebRequest ftpRequest = CreateRequest(uri, WebRequestMethods.Ftp.DownloadFile); int buffLength = 2048; int count; byte[] buff = new byte[buffLength]; bool result = false; using (FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create)) { FtpWebResponse response = (FtpWebResponse) ftpRequest.GetResponse(); Stream ftpStream = response.GetResponseStream(); count = ftpStream.Read(buff, 0, buffLength); while (count > 0) { outputStream.Write(buff, 0, count); count = ftpStream.Read(buff, 0, buffLength); } ftpStream.Close(); response.Close(); outputStream.Close(); result = true; } return result; } private FtpWebRequest CreateRequest(string uri, string requestMethod) { FtpWebRequest ftpRequest; ftpRequest = FtpWebRequest.Create(new Uri(uri)) as FtpWebRequest; ftpRequest.Credentials = new NetworkCredential(this.ftpUserName, this.ftpPassWord); ftpRequest.KeepAlive = false; ftpRequest.Method = requestMethod; ftpRequest.UseBinary = true; return ftpRequest; } }