Feedback

C# - Datei auf einen Ftp uploaden

Veröffentlicht von am 20.03.2007
(3 Bewertungen)
Mithilfe der Klasse FtpWebRequest eine lokale Datei auf einen Ftp Server abspeichern.
        private void SaveOnFtP()
        {
            //Eine neue Datei erstellen und lokal speichern (Beispiel hier: Textfile)
            StreamWriter w = new StreamWriter("C://Beispiele/MyFile.txt", true);
            w.WriteLine("BlaBlaBla");
            w.Close();

            //Ein Request erstellen an den ftp Server
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.meinftp.ch/");

            //Die Methode angeben um eine Datei hochzuladen
            request.Method = WebRequestMethods.Ftp.UploadFile;

            //Berechtigungsdetails setzen vom ftp Server durch Username und Passwort
            request.Credentials = new NetworkCredential("Username", "Passwort");

            try
            {
                //Versuch eine Verbindung zu erstellen und eine Antwort zu erhalten
                WebResponse response = request.GetResponse();
                MessageBox.Show("Response hat funktioniert");
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }


            //Neuer FileStream erstellen für die Datei
            FileStream fs = new FileStream("C://Beispiele/MyFile.txt", FileMode.Open);
            byte[] fileContents = new byte[fs.Length];
            fs.Read(fileContents, 0, Convert.ToInt32(fs.Length));
            fs.Flush();
            fs.Close();

            //Ein neuen Stream für den Request erstellen dem der FileStream mitgegeben wird.
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();

            //Verbindung abbschliessen
            request.Abort();              
}

/*
 * Die Datei ist nun auch lokal gespeichert
 *und muss dort wieder gelöscht werden.
 */
Abgelegt unter Upload, Ftp, FtpWebRequest.

7 Kommentare zum Snippet

xpr0keksx schrieb am 04.07.2009:
Was muss man da als using noch angeben? so klappt es nicht
Jan Welker schrieb am 04.07.2009:
Hallo,

using System.Net;
using System.IO;


werden benötigt.

Jan
Holger schrieb am 13.01.2010:
Hallo habe Probleme mit der URI bekomme immer wieder gesagt URI ist für diesen Befehl ungültig aber eigentlich müsste Sie passen! Bsp.:ftp://www.freenet.de
Klemens Nanni schrieb am 30.03.2010:
Hier eine Methode, die um einiges kürzer ist:
{
string dateipfad = "C:\\Pfad\Datei.*";
string FTP = "ftp://domain.*/Datei.*";
string FTPuser = "deinBenutzer";
string FTPpasswort = "deinPasswort";

My.Computer.Network.UploadFile(dateipfad, FTP, FTPuser, FTPpasswort);
}
Jan Leimbach schrieb am 19.06.2010:
@Klemens

Nett gemeint, aber die "My" Namespace steht nur unter Visual Basic.NET zur Verfügung.
Keks1911 schrieb am 21.06.2010:
@Jan: du bekommst die Network-Klasse auch unter C# aus dem Namespace Microsoft.VisualBasic.Devices in Microsoft.VisualBasic.dll
DimpiM schrieb am 16.02.2011:
Der Code funktioniert so nicht, VisualStudio bringt den Fehler:
Der Remoteserver hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z.B. nicht gefunden oder kein Zugriff).

Den Fehler kann man beheben, wenn man den FtpWebRequest etwas anders erstellt.
Man muss sollte ihn so erstellen:

String strFilename = "File.txt";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.meinftp.ch/"+strFilename);
 

Logge dich ein, um hier zu kommentieren!