C # Alle Dateien und Unterverzeichnisse über FTP herunterladen

Allgemeine Informatio
Ich bin noch dabei, C # zu lernen. Um mir selbst zu helfen, versuche ich, ein Programm zu erstellen, das alle meine lokalen Projekte automatisch mit einem Ordner auf meinem FTP-Server synchronisiert. Dies, damit ich in der Schule oder zu Hause immer die gleichen Projekte zur Verfügung habe.

Ich weiß, dass es Programme wie Dropbox gibt, die dies bereits für mich tun, aber ich dachte mir, dass es mir viel beibringen wird, so etwas selbst zu erstellen.

Das Proble
Mein erster Schritt in Richtung meines Ziels war es, einfach alle Dateien, Unterverzeichnisse und Unterdateien von meinem FTP-Server herunterzuladen. Ich habe es geschafft, alle Dateien aus einem Verzeichnis mit dem folgenden Code herunterzuladen. In meinem Code werden jedoch nur die Ordnernamen und die Dateien im Hauptverzeichnis aufgelistet. Unterordner und Unterdateien werden niemals zurückgegeben und niemals heruntergeladen. Abgesehen davon gibt der Server einen 550-Fehler zurück, da ich versuche, die Ordner herunterzuladen, als ob es sich um Dateien handelt. Ich bin jetzt seit 4+ Stunden dabei, aber ich kann einfach nichts finden, um diese Probleme zu beheben und sie zum Laufen zu bringen. Deshalb hoffe ich, dass ihr mir weiterhilft:)

Cod

public string[] GetFileList()
{
    string[] downloadFiles;
    StringBuilder result = new StringBuilder();
    WebResponse response = null;
    StreamReader reader = null;

    try
    {
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
        request.UseBinary = true;
        request.Method = WebRequestMethods.Ftp.ListDirectory;
        request.Credentials = new NetworkCredential(ftpUserName, ftpPassWord);
        request.KeepAlive = false;
        request.UsePassive = false;
        response = request.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 = url + "/" + file;
        Uri serverUri = new Uri(uri);
        if (serverUri.Scheme != Uri.UriSchemeFtp)
        {
            return;
        }
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url + "/" + file);
        request.UseBinary = true;
        request.Method = WebRequestMethods.Ftp.DownloadFile;
        request.Credentials = new NetworkCredential(ftpUserName, ftpPassWord);
        request.KeepAlive = false;
        request.UsePassive = false;
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        Stream responseStream = response.GetResponseStream();
        FileStream writeStream = new FileStream(localDestnDir + "\\" + 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");
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage