Laden...

Ftp download

Erstellt von max1761995 vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.547 Views
M
max1761995 Themenstarter:in
23 Beiträge seit 2013
vor 11 Jahren
Ftp download

Hei zusammen...

Ich möchte gerne alle Dateien, welche für einen Ftp benutzer existieren downloaden und in einen Ordner specihern meiner Wahl.

Hier mein code:




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace Party_FiendsDevelopement
{
    public partial class Logon : Form
    {
        public Logon()
        {
            InitializeComponent();
        }

        private void btnChose_Click(object sender, EventArgs e)
        {

            FolderBrowserDialog folderDlg = new FolderBrowserDialog();

            folderDlg.ShowNewFolderButton = true;

            // Show the FolderBrowserDialog.

            DialogResult result = folderDlg.ShowDialog();

            if (result == DialogResult.OK)
            {

                txtPath.Text = folderDlg.SelectedPath;

                Environment.SpecialFolder root = folderDlg.RootFolder;

            }
        }


        //FTP



        private class FtpData
        {
            public string RequestUriString;
            public string FileName;
            public DirectoryInfo Directory;
            public int DownloadAttemps;

            public FtpData(string requestUriString, string fileName, DirectoryInfo directory)
            {
                RequestUriString = requestUriString;
                FileName = fileName;
                Directory = directory;
                DownloadAttemps = 0;
            }
        }

        private List<FtpData> GetFilesAndDirectoriesToDownload(string requestUriString, DirectoryInfo workingDirectory, bool recursive)
        {
            List<FtpData> files = new List<FtpData>();
            List<FtpData> directories = new List<FtpData>();
            try
            {
                FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(requestUriString);

                req.Proxy = new WebProxy();
                req.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                req.KeepAlive = false;

                using (FtpWebResponse response = (FtpWebResponse)req.GetResponse())
                {
                    using (Stream dataStream = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(dataStream))
                        {
                            while (!reader.EndOfStream)
                            {
                                string entry = reader.ReadLine();
                                if (entry.StartsWith("d"))
                                {
                                    string directoryName = GetEntryName(entry);
                                    if (directoryName != "." && directoryName != ".." && recursive)
                                    {
                                        DirectoryInfo subDir = Directory.CreateDirectory(workingDirectory.FullName + "\\" + directoryName);
                                        directories.Add(new FtpData(requestUriString + "/" + directoryName, "", subDir));
                                    }
                                }
                                else
                                {
                                    files.Add(new FtpData(requestUriString + "/" + GetEntryName(entry), GetEntryName(entry), workingDirectory));
                                }
                            }

                        }
                    }
                }

                foreach (FtpData dir in directories)
                {
                    files.AddRange(GetFilesAndDirectoriesToDownload(dir.RequestUriString, dir.Directory, true));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return files;
        }

        void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
        {
            FtpData file = (FtpData)e.UserState;
            if (e.Error == null)
            {
                try
                {
                    File.WriteAllBytes(file.Directory.FullName + @"\" + file.FileName, e.Result);
                    pbDownloadProgress.Value += 1;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            else
            {
                if (file.DownloadAttemps <= 3)
                    DownloadFileAsynchron(file);
                else
                    MessageBox.Show("File " + file.FileName + " konnte nicht heruntergeladen werden.");
            }
        }

        private string GetEntryName(string entry)
        {
            string result = entry.Substring(entry.LastIndexOf(":"));
            result = result.Substring(result.IndexOf(" ") + 1);
            return result;
        }

        private void bnStartDownload_Click(object sender, EventArgs e)
        {
            lblStatus.Text = "Hole Dateien von FTP";
            Application.DoEvents();
            List<FtpData> filesToDownload = GetFilesAndDirectoriesToDownload("ftp://user:password@ftp-web.funpic.de", new DirectoryInfo(@"C:\Users\Max"), true);
            lblStatus.Text = "Hole Dateien von FTP fertig";
            Application.DoEvents();
            System.Threading.Thread.Sleep(2000);
            lblStatus.Text = "Starte Asynchroner Download von " + filesToDownload.Count.ToString() + " Dateien";
            pbDownloadProgress.Maximum = filesToDownload.Count;
            pbDownloadProgress.Value = 0;

            foreach (FtpData file in filesToDownload)
            {
                DownloadFileAsynchron(file);
            }
        }

        private void DownloadFileAsynchron(FtpData file)
        {
            using (WebClient wc = new WebClient())
            {
                wc.Proxy = new WebProxy();
                wc.DownloadDataCompleted += new DownloadDataCompletedEventHandler(wc_DownloadDataCompleted);
                file.DownloadAttemps += 1;
                wc.DownloadDataAsync(new Uri(file.RequestUriString), file);
            }
        }




    }
}




Wiso funktioniert das nicht ?

849 Beiträge seit 2006
vor 11 Jahren

Was funktioniert nicht? Was erwartest Du? Was passiert?

D
216 Beiträge seit 2009
vor 11 Jahren

Guck dir mal das hier an: [Hinweis] Wie poste ich richtig? (interessant für dich sind 1.1.1, 4a, 4.1 und 5)

M
max1761995 Themenstarter:in
23 Beiträge seit 2013
vor 11 Jahren

Was funktioniert nicht? Was erwartest Du? Was passiert?

ich erwarte , dass es mir alle ordner von dem FTP server downloadet,
es funktioniert nichts
es passiert nichts

849 Beiträge seit 2006
vor 11 Jahren

Also mal ganz ehrlich,

ein bischen Mitarbeit erwarten wir schon.. Setz Dich mit dem Debuggen ausseinander, und finde herraus ab wann dein Code nicht mehr das tut was Du erwartest. Dann denke noch einmal nach, ob Du Dir deine Frage nicht schon selbst beantworten kannst.
Wenn es dann immer noch nicht klappt kannst Du mit einer etwas spezielleren Frage nochmals nachhaken.

Gruß

M
max1761995 Themenstarter:in
23 Beiträge seit 2013
vor 11 Jahren

Also mal ganz ehrlich,

ein bischen Mitarbeit erwarten wir schon.. Setz Dich mit dem Debuggen ausseinander, und finde herraus ab wann dein Code nicht mehr das tut was Du erwartest. Dann denke noch einmal nach, ob Du Dir deine Frage nicht schon selbst beantworten kannst.
Wenn es dann immer noch nicht klappt kannst Du mit einer etwas spezielleren Frage nochmals nachhaken.

Gruß

hat sich geklärt, das tutorial war nicht so das ware....

Für Personen die nach genau dem suchen will ich noch eine Hilfe anbieten:

so hat es geklapppt:



 string[] names = new string[256];
        string[] filenames = new string[256];

        private void btnOpen_Click(object sender, EventArgs e)
        {
            OpenFileDialog OFD = new OpenFileDialog();
            OFD.Multiselect = true;
            if (OFD.ShowDialog() == DialogResult.OK)
            {

                if (OFD.FileNames.Length > 0)
                {

                    filenames = OFD.FileNames;
                    names = OFD.SafeFileNames;
                    int i = 0;
                    foreach (string values in filenames)
                    {
                        txtPath.Text = txtPath.Text + ';' + filenames[i];
                        i++;
                        
                    }
                  
                }
                
            }
        }

        private void btnUpload_Click(object sender, EventArgs e)
        {
            try
            {
                string links = txtPath.Text;
                string[] splitlinks = links.Split(new Char[] {';'});
                int i = 0;
                foreach (string values in splitlinks)
                {
                    string ftpname = txtPathFTP.Text + "/" + names[i];
                    WebClient Client = new WebClient();
                    Client.Credentials = new NetworkCredential(txtUser.Text, txtPassword.Text);
                    Client.UploadFile(ftpname, splitlinks[i]);
                    i++;
                }
            }

            catch
            {

                MessageBox.Show("falsche Daten");
            }

        }


Hoffe das hilft 😃

N
232 Beiträge seit 2011
vor 11 Jahren

Hmm, erst möchtest du alle Dateien runterladen und in deinem "funktionierenden" Beispiel sprichst du vom Upload.

Ich hab schon einiges an FTP Unterstützung in meine Software implementiert und kann dir bei genauerer Fragestellung behilflich sein.

Viel Erfolg weiterhin!