C# OrdnerInhalt auf FTP hochladen

PhilippVP

Cadet 2nd Year
Registriert
Juni 2013
Beiträge
24
Hallo Leute :)

ich brauche dringend eure Hilfe, ich hänge an diesem Problem schon seit Tagen fest und finde einfach keine Lösung dafür :(

Also ich habe einen Ordner, dessen Inhalt auf den FTP hochgeladen werden soll, leider finde ich dazu nichts :(

In meinem bisherigen Code was ich habe lädt er es nur hoch wenn ich eine Datei aus dem Verzeichnnis definiere.


Code:
            string Datei;

            Datei = @"Pfad";

            //Create FTP request
            FtpWebRequest request2 = (FtpWebRequest)FtpWebRequest.Create("FTPPfad" + "/" + Path.GetFileName(Datei));

            request2.Method = WebRequestMethods.Ftp.UploadFile;
            request2.Credentials = new NetworkCredential("name", "passwort");
            request2.UsePassive = true;
            request2.UseBinary = true;
            request2.KeepAlive = false;

            //Load the file
            FileStream stream2 = File.OpenRead(Datei);
            byte[] buffer2 = new byte[stream2.Length];

            stream2.Read(buffer2, 0, buffer2.Length);
            stream2.Close();

            //Upload file
            MessageBox.Show("Starten des Uploades der Datei!");
            Stream reqStream2 = request2.GetRequestStream();
            reqStream2.Write(buffer2, 0, buffer2.Length);
            reqStream2.Close();

            MessageBox.Show("Die bestehende Verbindung wurde getrennt/beendet!");


Könnt Ihr mir da helfen?
Danke schon einmal im Vorraus.


MFG PhilippVP
 
Eine mögliche Lösung:
Du lässt das Verzeichnis auf dem FTP-Server erstellen und lädst dann Stück für Stück alle Dateien hoch.
 
Der folgende Code sollte dir helfen dein Problem zu lösen. Einfach im foreach vom GetFiles() dein Upload machen.

Code:
System.IO.DirectoryInfo ParentDirectory = new System.IO.DirectoryInfo("C:\\Testordner");

foreach (System.IO.FileInfo f in ParentDirectory.GetFiles())
{
  Console.WriteLine("Datei: " + f.Name);
}

foreach (System.IO.DirectoryInfo d in ParentDirectory.GetDirectories())
{
   Console.WriteLine("Ordner: " + d.Name);
}
 
Meint ihr das so? Aber das funzt bei mir nicht :(


Code:
            System.IO.DirectoryInfo ParentDirectory = new System.IO.DirectoryInfo(@"E:\DateienFTP\Bilder");

            foreach (System.IO.FileInfo f in ParentDirectory.GetFiles())
            {
                lbDateien.Items.Add("Datei: " + f.Name);


                //Create FTP request
                FtpWebRequest request2 = (FtpWebRequest)FtpWebRequest.Create("FTPPfad" + "/" + Path.GetFileName(@"E:\DateienFTP\Bilder" + f.Name));

                request2.Method = WebRequestMethods.Ftp.UploadFile;
                request2.Credentials = new NetworkCredential("name", "passwort");
                request2.UsePassive = true;
                request2.UseBinary = true;
                request2.KeepAlive = false;

                //Load the file
                FileStream stream2 = File.OpenRead(f.Name);
                byte[] buffer2 = new byte[stream2.Length];

                stream2.Read(buffer2, 0, buffer2.Length);
                stream2.Close();

                //Upload file
                MessageBox.Show("Starten des Uploades der Datei!");
                Stream reqStream2 = request2.GetRequestStream();
                reqStream2.Write(buffer2, 0, buffer2.Length);
                reqStream2.Close();

                MessageBox.Show("Die bestehende Verbindung wurde getrennt/beendet!");
            }
 
Klappt bei mir so:

Code:
DirectoryInfo ParentDirectory = new DirectoryInfo(@"D:\Ordner\");

foreach (FileInfo f in ParentDirectory.GetFiles())
{
    //Create FTP request
    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://server/ordner/" + f.Name);
    request.Method = WebRequestMethods.Ftp.UploadFile;
    request.Credentials = new NetworkCredential("user", "password");
    request.UsePassive = true;
    request.UseBinary = true;
    request.KeepAlive = false;

    Console.WriteLine("Connection geöffnet");

    //Load the file
    FileStream stream = f.OpenRead();
    byte[] buffer = new byte[stream.Length];

    stream.Read(buffer, 0, buffer.Length);
    stream.Close();

    //Upload file
    Console.WriteLine("Lade Datei " + f.Name + " hoch...");
    Stream reqStream = request.GetRequestStream();
    reqStream.Write(buffer, 0, buffer.Length);
    reqStream.Close();
    Console.WriteLine("Connection geschlossen");
}
 
Zuletzt bearbeitet: (umgebaut)
/e: ... zuwenig gedacht...

beim pfad ein "\" am Ende könnte helfen
 
Zuletzt bearbeitet:
thecain schrieb:
Code:
FtpWebRequest request2 = (FtpWebRequest)FtpWebRequest.Create("FTPPfad" + "/" + Path.GetFileName(@"E:\DateienFTP\Bilder" + f.Name));

f.Name ist schon der FileName

Code:
FtpWebRequest request2 = (FtpWebRequest)FtpWebRequest.Create("FTPPfad" + "/" + f.Name);

Meine Lösung oben Funktioniert.
 
Danke für eure Hilfen das funktioniert soweit, aber das muss in dem Ordner vom Programm liegen aber ich will ja das er das in E:\DateienFTP\Bilder\ liegende nimmt, das ist noch mein Problem.

Hoffe Ihr könnt mir da helfen?
 
PhilippVP schrieb:
Danke für eure Hilfen das funktioniert soweit, aber das muss in dem Ordner vom Programm liegen aber ich will ja das er das in E:\DateienFTP\Bilder\ liegende nimmt, das ist noch mein Problem.

Hoffe Ihr könnt mir da helfen?

Zeig mal dein Code. In meinem Beispiel oben läd er alle Dateien aus dem Ordner "D:\Ordner\" nicht aus dem Programmverzeichnis
 
Danke für eure Hilfe jetzt klappt es bei mir ich habe noch was umgeändert beziehungsweise. übersehen beim kopieren. :)

DANKE!! :) (Y)
 
Zurück
Oben