wucher wichtel: C# - Verbindung zu einem FTP-Server

Hallo!

So langsam bin ich mit meinem <del>Latein</del><ins>SELF</ins> am Ende...

Deswegen eine einfache Frage: Hat mir jemand einen Code in C#, der eine Verbindung zu einem FTP-Server erstellt?

Ich habe schon sehr ausgiebig gegoogelt und warscheinlich jedes Suchergebnis mir angeschaut und die meisten ausprobiert. Wenn Programme gelaufen sind, dann haben sich in verschiedenen Exceptions aufgelöst. Ich suche nach einem Script (von mir aus auch nach einer *hilfreichen* Anleitung - auch wenn mir das in Bezug auf dieses Problem inzwischen zum Hals raus hängt ;-)) dessen einzige Aufgabe daraus besteht, eine Verbindung zu einem FTP-Server herzustellen. Wenn es das nicht gibt, dann wenigstens nach einem Programm, das nicht sehr groß ist (also keine Bibliothek mit tausenden Funktionen) und bei dem ich die wichtigen Dinge herauspflücken kann.

Ihr seid meine letzte Hoffnung auf eine Lösung :-)

ciao, Lukas

--
Nach einem Korrspondentenbericht der New York Times aus der umkämpften Stadt, wurden zur „Ausschaltung eines einzigen feindlichen Scharfschützen mehrere 500-Pfund-Bomben, 35 Artilleriegranaten des Kalibers 255, zehn Schüsse aus der Abrams-Panzerkanone sowie 30 000 Patronen leichter Munition benötigt”. „Die Gebäude waren daraufhin Ruinen”, schreibt die New York Times, „aber der Scharfschütze schoss weiter...”
  1. Hi,

    haben sich in verschiedenen Exceptions aufgelöst

    Das ist genauso hilfreich als wenn du es weggelassen hättest.

    Was hältst du denn vom system.net.ftpwebrequest

    Was willst du denn "nur" mit einer Verbindung zum FTP Server? Du willst doch darauf sicher was machen?

    Ciao, Frank

    1. Hallo!

      haben sich in verschiedenen Exceptions aufgelöst

      Das ist genauso hilfreich als wenn du es weggelassen hättest.

      Ich habe keine genaue Fehlerbeschreibung geliefert, weil ich sicher an die 5 Programme hatte, die sich in Exceptions "auflösten".

      Was hältst du denn vom system.net.ftpwebrequest

      Damit habe ich auch schon öfters rumprobiert, unter anderem heute auch schon. Jetzt habe ich es nochmal versucht. Ich habe den Code rauskopiert und dies ersetzt:

        
      Uri target = new Uri("ftp://ftp.adobe.com");  
      
      

      Damit bekomme ich eine "Web Exception: Der Remotename konnte nicht aufgelöst werden: 'ftp.adobe.com'". Diesen FTP-Server gibt es aber ftp://ftp.adobe.com/.

      Was willst du denn "nur" mit einer Verbindung zum FTP Server? Du willst doch darauf sicher was machen?

      Ich bin schon froh, wenn ich überhaupt mal eine Verbindung dazu habe. Ich habe aufgehört, über das "danach" nachzudenken, weil ich es seit geraumer Zeit nicht schaffe überhaupt eine Verbindung zu erstellen.

      Vielen Dank für deine Antwort!

      ciao, Lukas

      --
      Nach einem Korrspondentenbericht der New York Times aus der umkämpften Stadt, wurden zur „Ausschaltung eines einzigen feindlichen Scharfschützen mehrere 500-Pfund-Bomben, 35 Artilleriegranaten des Kalibers 255, zehn Schüsse aus der Abrams-Panzerkanone sowie 30 000 Patronen leichter Munition benötigt”. „Die Gebäude waren daraufhin Ruinen”, schreibt die New York Times, „aber der Scharfschütze schoss weiter...”
      1. Hi,

        naja, "Web Exception" und dass der Name nicht aufgelöst werden konnte, ist schon mal ein Fortschritt.

        Ich hoffe, du kannst dich bis morgen gedulden, dann kann ich das mal von Arbeit aus probieren. Hab grad kein System online mit Visual Studio drauf.

        cIAO; als denn
        Frank

      2. Hi nochmals!

        also bei mir funktioniert folgender Code soweit wunderbar, ohne Exception :)

        FtpWebRequest wr2 = FtpWebRequest)WebRequest.Create("ftp://ftp.adobe.com");
        // we need a proxy with credentials
        wr2.Proxy = new WebProxy("chproxy", 80);
        wr2.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
        // what do we want with the request?
        wr2.Method = WebRequestMethods.Ftp.ListDirectory;
        // we are firewalled, only PASV mode
        wr2.UsePassive = true;
        // get the response
        FtpWebResponse fwr = (FtpWebResponse)wr2.GetResponse();
        // continue with getting the response stream, check the Status of the web response and that's it

        Wenn du den Namen nicht auflösen kannst, hast du evt. Beschränkungen des .net codes via Code Access Security? Bzw. ein allgemeines, nicht programmier-spezifisches Problem...

        Gruss, Frank

        1. Hallo!

          also bei mir funktioniert folgender Code soweit wunderbar, ohne Exception :)

          Bei mir leider nicht. Wieder eine WebException. "Der Proxyname konnte nicht aufgelöst werden.: 'chproxy'".

          FtpWebResponse fwr = (FtpWebResponse)wr2.GetResponse(); // *** Hier gibts die Fehlermeldung ***

          Wenn du den Namen nicht auflösen kannst, hast du evt. Beschränkungen des .net codes via Code Access Security?

          Ich habe kurz gegoogelt und auch bei MSDN gesucht, allerdings auf Anhieb nichts gefunden, das mir sagt wie ich da die Beschränkung aufheben kann. Leider habe ich heute keine Zeit mehr tiefgründiger zu suchen. Ich melde mich dann morgen.

          Bzw. ein allgemeines, nicht programmier-spezifisches Problem...

          Das wäre noch blöder... Aber auf jeden Fall vielen Dank für deine Hilfe!!

          ciao, Lukas

          --
          Nach einem Korrspondentenbericht der New York Times aus der umkämpften Stadt, wurden zur „Ausschaltung eines einzigen feindlichen Scharfschützen mehrere 500-Pfund-Bomben, 35 Artilleriegranaten des Kalibers 255, zehn Schüsse aus der Abrams-Panzerkanone sowie 30 000 Patronen leichter Munition benötigt”. „Die Gebäude waren daraufhin Ruinen”, schreibt die New York Times, „aber der Scharfschütze schoss weiter...”
          1. Hey,

            hast du deinen Proxy, bzw. musst du einen Proxy verwenden?

            Mein Beispiel mit dem Proxy gilt natürlich für mein Netzwerk, ich bezweifle, dass du einen Proxy mit selbem Namen hast.

            Wenn du keinen Proxy hast, dann lass die betreffenden Zeilen einfach raus?

            Ciao, Frank

            1. Hallo!

              Wenn du keinen Proxy hast, dann lass die betreffenden Zeilen einfach raus?

              Hach, ich kann mein Glück irgendwie gar nicht fassen...

              Es sieht so aus, wie wenn es wirklich laufen würde. Keine Exception. Vielen vielen Dank!

              Jetzt schaue ich mal nach, wie ich Dateien hochladen kann (jetzt kann ich mich damit endlich beschäftigen :-)). Nochmals danke schön!

              ciao, Lukas

              --
              Nach einem Korrspondentenbericht der New York Times aus der umkämpften Stadt, wurden zur „Ausschaltung eines einzigen feindlichen Scharfschützen mehrere 500-Pfund-Bomben, 35 Artilleriegranaten des Kalibers 255, zehn Schüsse aus der Abrams-Panzerkanone sowie 30 000 Patronen leichter Munition benötigt”. „Die Gebäude waren daraufhin Ruinen”, schreibt die New York Times, „aber der Scharfschütze schoss weiter...”
              1. es gibt eine Enumeration für FtpRequestMethods, download file, getdirectorylist usw.

                Daten sendest du synchron oder asynchron mit (Begin/End)GetRequestStream. Der verlinkte Artikel sollte eine praktisches Upload-Beispiel bereits zeigen.

                wenn du einfach nur eine Datei hochladen willst, dann empfiehlt sich vielleicht sogar "nur" die Verwendung der "WebClient" Klasse und ihrer Methoden UploadFile ... Das sollte dir das Vorhaben noch einfacher machen. Desterwegen hatte ich ja auch nachgefragt, was du mit der Verbindung zum FTP Server dann willst?

                Ciao, Frank

                1. Hallo!

                  es gibt eine Enumeration für FtpRequestMethods, download file, getdirectorylist usw.

                  Also das Hochladen klappt. Andere Sachen konnte ich noch nicht ausprobieren.

                  Daten sendest du synchron oder asynchron mit (Begin/End)GetRequestStream. Der verlinkte Artikel sollte eine praktisches Upload-Beispiel bereits zeigen.

                  Genau dieses Beispiel habe ich mir angesehen.

                  wenn du einfach nur eine Datei hochladen willst, dann empfiehlt sich vielleicht sogar "nur" die Verwendung der "WebClient" Klasse und ihrer Methoden UploadFile ...

                  Hmm...WebClient habe ich in schlechter Erinnerung. Damit habe ich es auch schon versucht. Ich schaue mir morgen nochmal die WebClient-Klasse an und frage gegebenenfalls nach, da ich heute leider keine Zeit habe bzw. gehabt habe.

                  Das sollte dir das Vorhaben noch einfacher machen. Desterwegen hatte ich ja auch nachgefragt, was du mit der Verbindung zum FTP Server dann willst?

                  Ich will eigentlich Dateien hoch- und runterladen und Verzeichnisse erstellen. Eventuell kommen später weitere Dinge dazu, aber im Moment beschränken sich die Aufgaben auf diese 3 Dinge.

                  Danke für deine Hilfe.

                  ciao, Lukas

                  --
                  Nach einem Korrspondentenbericht der New York Times aus der umkämpften Stadt, wurden zur „Ausschaltung eines einzigen feindlichen Scharfschützen mehrere 500-Pfund-Bomben, 35 Artilleriegranaten des Kalibers 255, zehn Schüsse aus der Abrams-Panzerkanone sowie 30 000 Patronen leichter Munition benötigt”. „Die Gebäude waren daraufhin Ruinen”, schreibt die New York Times, „aber der Scharfschütze schoss weiter...”
                  1. Hallo!

                    Jetzt haben sich alle meine Fragen, was FTP angeht, verflüchtigt. Danke für deine Hilfe! Irgendwie scheint es mir jetzt im Nachhinein nicht so schwer. Aber alleine hat es einfach nicht geklappt. Danke schön!

                    Jetzt habe ich noch eine kleine Frage: Weißt du mit welcher Klasse (bzw. welchen Methoden) ich ein bestehendes XML-Dokument ändern kann? Wie man ein neues Dokument anlegt und in dieses Daten schreibt weiss ich. Aber Google und MSDN konnten mir bei dieser Frage leider nicht weiterhelfen. Weißt du evtl. mit was das geht?

                    Auf jeden Fall vielen Dank für die Hilfe bei meinem FTP-Problem!

                    ciao, Lukas

                    --
                    Nach einem Korrspondentenbericht der New York Times aus der umkämpften Stadt, wurden zur „Ausschaltung eines einzigen feindlichen Scharfschützen mehrere 500-Pfund-Bomben, 35 Artilleriegranaten des Kalibers 255, zehn Schüsse aus der Abrams-Panzerkanone sowie 30 000 Patronen leichter Munition benötigt”. „Die Gebäude waren daraufhin Ruinen”, schreibt die New York Times, „aber der Scharfschütze schoss weiter...”
                    1. Hi,

                      dass MSDN dir da nicht helfen kann, finde ich arg verwunderlich!

                      Im Namespace System.Xml findest du mindestens die Klasse

                      - System.Xml.XmlDocument

                      welches ein DOM implementiert. Damit kannst du gezielt Nodes ansteuern, entfernen, hinzufügen, Attribute modifizieren. Zur Lokalisierung von Nodes kannst du XPath in den Methoden SelectNodes() und SelectSingleNode() oder die Child(Nodes) Collections verwenden.

                      Wenn du einfach nur schnell vorwärts durch ein XML Dokument lesen willst um daten daraus woandershin zu schreiben gibt es den Xml(Text)Reader. Zum schnellen Schreiben den Xml(Text)Writer.

                      Für mehr XPath gibt es den Hybrid aus Xml(Text)Reader und XmlDocument, genannt XPathDocument. Dieser ist aber nur zum _Lesen_ da.

                      Und schliesslich gibt es noch die Möglichkeit XSL(T) auszuführen mit XmlDocument und Klassen in System.Xml.Xsl, z.b. XsltTransform.

                      Ciao, Frank

                      1. Hallo!

                        dass MSDN dir da nicht helfen kann, finde ich arg verwunderlich!

                        So ist es besser formuliert: Ich bin nicht in der Lage die Hilfe, die mir MSDN bietet, zu nützen. So ging es mir vor knappen 3 Jahren mit der Doku von SELFHTML.

                        Woran das liegt weiß ich nicht. Aber irgendwann weiß man, was die einem sagen wollen :)

                        Inzwischen weiß ich, dass (bzw. wie) ich mit Load() ein Dokument laden kann. Außerdem gehe ich davon aus, dass ich mit CreateNode() einen Knoten erstellen kann. Aber was sind die richtigen Parameter? Was ist NamespaceURI? -> in MSDN ist die Erklärung (für einen Anfänger) dazu sehr sparsam:

                        "Der Namespace-URI dieses Knotens. Wenn kein Namespace-URI vorhanden ist, gibt diese Eigenschaft String.Empty zurück."

                        Ich habe in meinem Testdokument keine Namespace-URI. Also lasse ich es leer. Aber egal mit welchen Werten, mein Programm funktioniert nicht.

                          
                        XmlDocument test = new XmlDocument();  
                        test.Load("C:\\test.xml");  
                        test.CreateNode(XmlNodeType.Element, "moin", "");  
                        
                        

                        Ich vermute, dass ich noch irgendwelche andere Angaben machen muss. Sonst würde es ja funktionieren. Aber wie muss ich es richtig machen?

                        Im Namespace System.Xml findest du mindestens die Klasse

                        • System.Xml.XmlDocument

                        welches ein DOM implementiert. [...]

                        Danke für diese Übersicht. So genau war mir nicht klar, wofür man all die verschiedenen Sachen benötigt.

                        Hast du einen Beispielcode wie man z.B. an einer bestimmten Stelle im XML-Dokument ein weiteres Element einfügen kann? Ich verstehe zwar wie ich per XPath einen bestimmten Knoten auswählen kann, aber wie kann ich dann dort etwas einfügen? Das müsste doch über CreateNode gehen, oder? Aber CreateNode ist ja keine Methode von XPath... Das Zusammenspiel der verschiedenen Klassen verstehe ich nicht (wenn es überhaupt eines gibt).

                        Danke für deine Hilfe!

                        ciao, Lukas

                        --
                        Nach einem Korrspondentenbericht der New York Times aus der umkämpften Stadt, wurden zur „Ausschaltung eines einzigen feindlichen Scharfschützen mehrere 500-Pfund-Bomben, 35 Artilleriegranaten des Kalibers 255, zehn Schüsse aus der Abrams-Panzerkanone sowie 30 000 Patronen leichter Munition benötigt”. „Die Gebäude waren daraufhin Ruinen”, schreibt die New York Times, „aber der Scharfschütze schoss weiter...”
                        1. Hi,

                          wir könnten diese Diskussion auch separat fortsetzen :) ... via eMail und so.

                          Das Konzept von Namensräumen in XML ist dir bekannt? Dann wirst du auch sicher wissen, was ein Namespace-URI ist. SelfHTML spuckt sogar zu URI etwas aus. :)

                          Wichtig für das Verständnis, die Namespace URI muss keine real existierende http-resource sein, auch wenn sie http://myCompany.com/namespaces/fundaccounting heisst. Einfach nich ignorieren :)

                          Für die Anfänge brauchst du dich nicht wirklich mit solchen Themen herumschlagen, XML Namespaces einfach vergessen am besten.

                          In .Net haben die Methoden von Klassen sehr oft Überladungen mit mehreren Parametersätzen. CreateNode hat zum Beispiel 3 :)

                          CreateNode erzeugt dir einfach nur eine Instanz eines XmlNode auf Basis von z.b. Namespaces im Dokument. Aber im Dokument drin, ist es deshalb noch lange nicht. Dazu benötigst du die Methode AppendChild(), welcher jeder XmlNode zur Verfügung stellt. XmlNode ist eine Basisklasse für vieles, für "richtige" Nodes, für Attribute und auch das XmlDokument(root) - in deinem Fall "test" ist ein XmlNode.

                          Ein hübsches einfaches Beispiel für das was du möchtest, findest du hier.

                          Wenn du mit der MSDN nicht zurecht kommst, kauf dir n Buch! Bücher für .net 1.1 sind (für dein Level) genauso gut wie neuere _teurere_ Bücher. ;)

                          Ciao, Frakn

                          1. Hallo!

                            wir könnten diese Diskussion auch separat fortsetzen :) ... via eMail und so.

                            :-) gerne, aber eigentlich hat sich jetzt alles geklärt.

                            Wenn du mit der MSDN nicht zurecht kommst, kauf dir n Buch! Bücher für .net 1.1 sind (für dein Level) genauso gut wie neuere _teurere_ Bücher. ;)

                            Ich habe schon 2 Bücher daheim stehen. Das Problem ist, Bücher zu finden, die nicht für den absoluten Neueinsteiger sind, aber trotzdem sich nicht an die totalen Experten richten.
                            Also nochmal Danke für deine Hilfe und dass du jedes mal geantwortet hast!

                            ciao, Lukas

                            --
                            Nach einem Korrspondentenbericht der New York Times aus der umkämpften Stadt, wurden zur „Ausschaltung eines einzigen feindlichen Scharfschützen mehrere 500-Pfund-Bomben, 35 Artilleriegranaten des Kalibers 255, zehn Schüsse aus der Abrams-Panzerkanone sowie 30 000 Patronen leichter Munition benötigt”. „Die Gebäude waren daraufhin Ruinen”, schreibt die New York Times, „aber der Scharfschütze schoss weiter...”