FTP Dateien anzeigen und vorhanden Dateien mit selben Namen im Ordner löschen

  • C#
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    FTP Dateien anzeigen und vorhanden Dateien mit selben Namen im Ordner löschen

    Hallo!
    Ich programmiere derzeit einen kleinen Updater für mein Tool, jedoch kann ich nicht die Dateien löschen.

    Vorhaben:
    Ich hatte vor die ganzen Dateien vom FTP-Server anzuzeigen, und die Dateien im Applikations-Ordner mit den selben Namen zu löschen.
    Jedoch bekomme ich folgende Fehlermeldung:

    System.NotSupportedException schrieb:


    The given path's format is not supported.


    Code:

    C#-Quellcode

    1. try
    2. {
    3. FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://DOMAIN/");
    4. request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
    5. request.Credentials = new NetworkCredential("anonymous", "");
    6. FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    7. Stream responseStream = response.GetResponseStream();
    8. StreamReader reader = new StreamReader(responseStream);
    9. string files = reader.ReadToEnd();
    10. DirectoryInfo d = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
    11. FileInfo[] Files = d.GetFiles();
    12. MessageBox.Show(files);
    13. foreach (FileInfo file in Files)
    14. {
    15. File.Delete(AppDomain.CurrentDomain.BaseDirectory + "/" + files);
    16. }
    17. reader.Close();
    18. response.Close();
    19. }
    20. catch (Exception exe)
    21. {
    22. MessageBox.Show(exe.ToString());
    23. }


    Das komische ist, wenn ich files (<- FTP-Dateien) ausgebe, wird mir folgendes angezeigt.
    ​-rw-r--r-- 1 ftp ftp 0 May 1 19:24 test.php


    Mit freundlichen Grüßen
    Ich verstehe das System nicht. Was willst Du da vergleichen und löschen?
    Und generell: FTP ist eine schlechte Idee, besonders hier. HTTP(S) ist die richtige Alternative.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Vollzitat entfernt. ~Trade
    Ich möchte überprüfen ob die Dateien auf dem Server im Ordner existieren. Falls ja, sollen diese Dateien gelöscht werden und die neuen Dateien heruntergeladen werden.
    Ich weiß nicht so recht, ob das mit HTTP klappt, es sind ja mehrere Dateien inkl. Ordner.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    Ja, und das ist 'ne ganz schlechte Idee, sowas mit FTP zu lösen. Generell ist es grob fahrlässig, die Dateien unsigniert zu laden und dann auszuführen, da sich im lokalen Netzwerk schnell mal Malware einschleichen kann. Und mit FTP ist das noch unsicherer, als so schon.
    Für das Laden von Dateien von einem Server gibt es HTTP(S), womit es natürlich auch klappt. Du musst Dir nur eine entsprechende Struktur überlegen.

    Alternativ habe ich auch eine Lösung entwickelt: nUpdate - Die einfache Updatelösung

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:


    Alternativ habe ich auch eine Lösung entwickelt: nUpdate - Die einfache Updatelösung

    Danke, aber das Problem ist, ich möchte keine Third-Party Sachen verwenden, sondern etwas eigenes entwickel.
    Weiß nicht genau wie ich das mit HTTP lösen soll, werde es mir aber mal nochmal anschauen.
    Das verstehe ich. Aber es gibt da einfach viel zu beachten.
    Generell sollten die Dateien auch nicht einzeln irgendwo rumschwirren, sondern Pakete erstellt werden, die diese enthalten. Somit ist es viel leichter, diese zu warten, denn Du erhälst Dir damit die Übersicht und sparst eine Menge an Daten, weil Du u. a. die Signatur nur für diese Datei bilden und prüfen musst.
    Somit geht es auch schneller.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Wie wäre die Idee, wenn man das Update als .ZIP runterlädt und dann die Inhalte mit den Ordner überprüft ggf. die alten Dateien löschen und mit den neuen von der ZIP ersetzen.
    Sonst fällt mir nicht wirklich was ein. Genutzt wird hier natürlich eine verschlüsselte Verbindung (HTTPS/SSL).

    C#-Quellcode

    1. foreach (FileInfo file in Files)
    2. {
    3. File.Delete(AppDomain.CurrentDomain.BaseDirectory + "/" + files);
    4. }

    Hä?
    Du schleifst deine Files durch und benutzt files und nicht file? Ich vermute da einen tippfehler, kann passieren wenn man seine variablen gleich nennen muss.

    Ausserdem musst du "\" mit "/" in der fileinfo nehmen, und fileinfo != string, also fileinfo.fullpath o.ä.

    Desweiteren würde ich php als gegenstelle in http verwenden, das was du machst ist da nicht so schwer.
    Wer Rechtschreibfehler findet darf sie behalten :)
    Ja, .ZIP als Pakete wäre ok. Beachte: Eine verschlüsselte Verbindung alleine ist nicht sicher genug. Du musst die Archive dann noch signieren!
    Für das Löschen von Dateien habe ich spezielle Operations implementiert.
    Mit ins Paket aufgenommene Dateien werden einfach kopiert und überschreiben alte Dateien.

    PHP ist bei dieser Vorgehensweise nicht notwendig.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()