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!
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
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.
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?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code