Laden...

Gesamte Ordnerinhalt +UNTERORDNER von Server runterladen

Erstellt von tom566 vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.813 Views
Thema geschlossen
T
tom566 Themenstarter:in
1 Beiträge seit 2011
vor 12 Jahren
Gesamte Ordnerinhalt +UNTERORDNER von Server runterladen

Hallo,

ich will den Inhalt eines bestimmten Ordners am FTP-Server inkl. aller Unterordner und deren Unterordner und deren Dateien etc. in einen Ordner am PC runterladen.

In einem anderen Forum bin ich auf einen Code gestoßen, diesen habe ich auf mich angepasst und getestet. Es funktionert perfekt, es gibt nur ein Problem: der Code um Unterordner und deren untergeordnete Dateien, Ordner usw. auf mitzuladen, fehlt. Also werden nur die Dateien runtergeladen und bei den Ordner wird die Exception durch den try-catch-Block abgefangen.

Ich würde mich sehr über die gewünschte Vervollständigung des folgenden Codes freuen:


public void laden()
		{
			string[] files = GetFileList();
	        foreach (string file in files)
	        {
	            Download(file);
	        }
		}

        public string[] GetFileList()
        {
            string[] downloadFiles;
            StringBuilder result = new StringBuilder();
            WebResponse response = null;
            StreamReader reader = null;
            try
            {
                FtpWebRequest reqFTP;
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServer));
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
                reqFTP.Proxy = null;
                reqFTP.KeepAlive = false;
                reqFTP.UsePassive = false;
                response = reqFTP.GetResponse();
                reader = new StreamReader(response.GetResponseStream());
                string line = reader.ReadLine();
                while (line != null)
                {
                    result.Append(line);
                    result.Append("\n");
                    line = reader.ReadLine();
                }
                result.Remove(result.ToString().LastIndexOf('\n'), 1);
                return result.ToString().Split('\n');
            }
            catch (Exception ex)
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (response != null)
                {
                    response.Close();
                }                
                downloadFiles = null;
                return downloadFiles;
            }
        }

        private void Download(string file)
        {                       
            try
            {                
                string uri = ftpServer;
                MessageBox.Show(uri);
                Uri serverUri = new Uri(uri);
                if (serverUri.Scheme != Uri.UriSchemeFtp)
                {
                    return;
                }       
                FtpWebRequest reqFTP;                
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServer));                                
                reqFTP.Credentials = new NetworkCredential(ftpUsername, ftpPassword);                
                reqFTP.KeepAlive = false;                
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;                                
                reqFTP.UseBinary = true;
                reqFTP.Proxy = null;                 
                reqFTP.UsePassive = false;
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream responseStream = response.GetResponseStream();
                FileStream writeStream = new FileStream(Application.StartupPath+"/zielverzeichnis/" + file, FileMode.Create);               
                int Length = 2048;
                Byte[] buffer = new Byte[Length];
                int bytesRead = responseStream.Read(buffer, 0, Length);               
                while (bytesRead > 0)
                {
                    writeStream.Write(buffer, 0, bytesRead);
                    bytesRead = responseStream.Read(buffer, 0, Length);
                }                
                writeStream.Close();
                response.Close(); 
            }
            catch (WebException wEx)
            {
                MessageBox.Show(wEx.Message, "Download Error");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Download Error");
            }
        }

Vielen Dank im Vorraus! 🙂

LG
Tom

699 Beiträge seit 2007
vor 12 Jahren

Ich würde mich sehr über die gewünschte Vervollständigung des folgenden Codes freuen:

Und Du hast hoffnung, das dir hier jemand die programmierung abnimmt?

TIP: Nimm ein FTP Programm deiner Wahl und ziehe den Ordner incl allem darin auf deinen Rechner, dann ersparste Dir die programmierung ( lernen ).

Grüße
Stephan

PS: Bin normal der letzte der keinen Tip geben würde, aber auf so einen Post gibt es auch bei mir nix.

3.170 Beiträge seit 2006
vor 12 Jahren

Hallo und willkommen im Forum,

Ich würde mich sehr über die gewünschte Vervollständigung des folgenden Codes freuen: Das gibt's hier nicht einfach so serviert, bitte beachte diesbezüglich [Hinweis] Wie poste ich richtig? Punkt 4a,b,c
Aber einen Tipp bekommst Du schon: Unterordner erreicht man auch bei FTP durch Rekursion. Das sollte als Stichwort reichen, und da es sich dabei um Grundlagen handelt, die auch nicht web-spezifisch sind, beachte auch Punkt 1.1.1 von [Hinweis] Wie poste ich richtig?

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

Thema geschlossen