Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
C# - FTP-Server unbekannter Überprüfungsfehler
Dultus
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

C# - FTP-Server unbekannter Überprüfungsfehler

beantworten | zitieren | melden

Einen guten Abend nochmals...

Ich habe meinen Code jetzt ausgebaut.

public partial class Form1 : Form
    {
        private bool endnr = false;

        public Form1()
        {
            InitializeComponent();

            string Dat = "ftp://dultus.lima-ftp.de/";


            var Exists = (FtpWebRequest)WebRequest.Create(Dat+"+1+.txt");
            Exists.Credentials = new NetworkCredential("dultus", "PASSWORT");
            Exists.Method = WebRequestMethods.Ftp.GetFileSize;
            try
            {
                FtpWebResponse Anfrage = (FtpWebResponse)Exists.GetResponse();
                {
                    int nr = 1;
                    endnr = false;
                    while (endnr == false)
                    {
                        string Tester = "+" + Convert.ToString(nr)+"+.txt";
                        var Existingnr = (FtpWebRequest)WebRequest.Create(Dat+Tester);
                        Existingnr.Credentials = new NetworkCredential("dultus", "PASSWORT");
                        string[] ArrayZahl = Tester.Split('+');
                        nr = Convert.ToInt32(ArrayZahl[1]);
                        try
                        {
                            FtpWebResponse response = (FtpWebResponse)Existingnr.GetResponse();
                            nr++;
                        }
                        catch (WebException Ex)
                        {
                            FtpWebResponse response = (FtpWebResponse)Ex.Response;
                            if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
                            {
                                endnr = true;
                            }
                        }
                    }

                    //Ein Request erstellen an den ftp Server
                    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(Dat +"+"+ nr + "+.txt");

                    //Die Methode angeben um eine Datei hochzuladen
                    request.Method = WebRequestMethods.Ftp.UploadFile;

                    //Berechtigungsdetails setzen vom ftp Server durch Username und Passwort
                    request.Credentials = new NetworkCredential("Dultus", "PASSWORT");

                    try
                    {
                        //Versuch eine Verbindung zu erstellen und eine Antwort zu erhalten
                        WebResponse response = request.GetResponse();
                        MessageBox.Show("Response hat funktioniert");
                    }
                    catch (Exception exp)
                    {
                        throw exp;
                    }


                    //Neuer FileStream erstellen für die Datei
                    FileStream fs = new FileStream("C://Beispiele/MyFile.txt", FileMode.Open);
                    byte[] fileContents = new byte[fs.Length];
                    fs.Read(fileContents, 0, Convert.ToInt32(fs.Length));
                    fs.Flush();
                    fs.Close();

                    //Ein neuen Stream für den Request erstellen dem der FileStream mitgegeben wird.
                    Stream requestStream = request.GetRequestStream();
                    requestStream.Write(fileContents, 0, fileContents.Length);
                    requestStream.Close();

                    //Verbindung abbschliessen
                    request.Abort();
                }
            }

            catch (WebException ex)
            {
                FtpWebResponse Anfrage = (FtpWebResponse)ex.Response;
                if (Anfrage.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
                {
                    //Ein Request erstellen an den ftp Server
                    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(Dat + "+1+.txt");

                    //Die Methode angeben um eine Datei hochzuladen
                    request.Method = WebRequestMethods.Ftp.UploadFile;

                    //Berechtigungsdetails setzen vom ftp Server durch Username und Passwort
                    request.Credentials = new NetworkCredential("Dultus", "PASSWORT");

                    try
                    {
                        //Versuch eine Verbindung zu erstellen und eine Antwort zu erhalten
                        WebResponse response = request.GetResponse();
                        MessageBox.Show("Response hat funktioniert");
                    }
                    catch (Exception exp)
                    {
                        throw exp;
                    }


                    //Neuer FileStream erstellen für die Datei
                    FileStream fs = new FileStream("C://Beispiele/MyFile.txt", FileMode.Open);
                    byte[] fileContents = new byte[fs.Length];
                    fs.Read(fileContents, 0, Convert.ToInt32(fs.Length));
                    fs.Flush();
                    fs.Close();

                    //Ein neuen Stream für den Request erstellen dem der FileStream mitgegeben wird.
                    Stream requestStream = request.GetRequestStream();
                    requestStream.Write(fileContents, 0, fileContents.Length);
                    requestStream.Close();

                    //Verbindung abbschliessen
                    request.Abort();

                }
            }
        }

Das Problem ist hier, dass bei

var Exists = (FtpWebRequest)WebRequest.Create(Dat+"+1+.txt");
            Exists.Credentials = new NetworkCredential("dultus", "PASSWORT");
            Exists.Method = WebRequestMethods.Ftp.GetFileSize;
            try
            {
                FtpWebResponse Anfrage = (FtpWebResponse)Exists.GetResponse();
                {
                    int nr = 1;
                    endnr = false;
                    while (endnr == false)
                    {
                        string Tester = "+" + Convert.ToString(nr)+"+.txt";
                        var Existingnr = (FtpWebRequest)WebRequest.Create(Dat+Tester);
                        Existingnr.Credentials = new NetworkCredential("dultus", "PASSWORT");
                        string[] ArrayZahl = Tester.Split('+');
                        nr = Convert.ToInt32(ArrayZahl[1]);
                        try
                        {
                            FtpWebResponse response = (FtpWebResponse)Existingnr.GetResponse();
                            nr++;
                        }
                        catch (WebException Ex)
                        {
                            FtpWebResponse response = (FtpWebResponse)Ex.Response;
                            if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
                            {
                                endnr = true;
                            }
                        }
                    }

Der Catch irgendwie nicht mehr ausgelöst wird. Visual Studio friert dann einfach ein.
Das Programm an sich funktioniert, wie ich will. Es werden 2 Textdateien erstellt. Jedoch überprüft er die Folgenden nicht und der Fehler tritt auf. Ein Exception wird mir nicht ausgeworfen.

Eine Alternative wäre dabei auch schön (Ich bin Schüler und lerne das momentan von mir selbst). Ist das auch ohne den Catch eventuell umbaubar (Eine Reparatur meines Scriptes würde ich aber bevorzugen)?

Ich danke für jede Hilfe!
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15704
Herkunft: BW

beantworten | zitieren | melden

Vermutlich eine Endlosschleife.
Bekommste raus, wenn Du in Deine Schleife einen Breakpoint setzt: [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Allein die Tatsache, dass es _immer_ eine Endlosschleife gibt, wenn KEINE Exception (nur in der Exception wird die Abbruchbedingung gesetzt) geworfen wird, ist eine fragwürdige Logik.
private Nachricht | Beiträge des Benutzers
Dultus
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Es ist keine Endlosschleife. Es werden vorher 2 Dateien hochgeladen, welche vorerst überprüft werden, ob diese denn schon existieren. Es funktioniert also auch. Sogar 2 Mal. Wenn ich einen Breakpoint setze, kommt der besagte Fehler nach dem 3.+ Male. Ich erhalte keine Meldung und das Programm friert ein.
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

In welcher Zeile friert der Code ein?
private Nachricht | Beiträge des Benutzers
Dultus
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

                        try
                        {
                            FtpWebResponse response = (FtpWebResponse)Existingnr.GetResponse();
                            nr++;
                        }

Bei dem FtpWebResponse response = (FtpWebResponse)Existingnr.GetResponse();
Das geht Programm solange es nicht weiter als 2 zählen muss.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15704
Herkunft: BW

beantworten | zitieren | melden

Dann passt Deine Beschreibung nicht zum Problem.

GetResponse blockiert solange, bis Content verfügbar ist, oder das Timeout erreicht wurde.
Danach wird eine WebException geworfen. Steht auch so in der Dokumentation.

Dass Visual Studio abstürzt kann nicht davon kommen.

Dass das Programm selbst so aussieht, als würde es einfrieren, wird hier erklärt:
[FAQ] Warum blockiert mein GUI?
private Nachricht | Beiträge des Benutzers