swonson Geschrieben 3. Februar 2010 Teilen Geschrieben 3. Februar 2010 Nabend leute, Ich möchte ein tool schreiben, womit ich auf einem ftp connecten kann und alles runterladen kann. Ich finde nur seiten im internet, wo beschrieben wird wie man file downloaded und nicht wie man den gesamten ftp bzw einen aufgewählten tree komplett (sammt ornder und unterordner) downloade... kann mri jemand helfen ? ich bin für jeden ansatz dankbar mit besten grüßen swonson Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 3. Februar 2010 Teilen Geschrieben 3. Februar 2010 c# ftp server download all files - Google-Suche gidf Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 4. Februar 2010 Autor Teilen Geschrieben 4. Februar 2010 danke für de antwort 0815FIA, aber ich hatte schon gegoogelt und ich finde dennoch nichts was alles files + unterordner saugt und ihm gleich format bzw. in der gleich struktur wieder abspeichert... need help Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2010 Teilen Geschrieben 4. Februar 2010 need help Ja wobei denn? Du hast doch hoffentlich nicht erwartet, dass du irgendwo genau den richtigen Code für dein Problem findest? Zerleg dein Problem in Teilprobleme, und dann sag, wo genau du nicht weiterkommst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 4. Februar 2010 Autor Teilen Geschrieben 4. Februar 2010 Vielen Dank Klotzkopp ersteinmal für deinen geistreichen Erguß.... Mir ist klar das ich kein fertigen Code kriege deswegen ja auch kann mri jemand helfen ? ich bin für jeden ansatz dankbar;) Aber gut was solls. Ich hab im groben zwei classen gebaut, die von der main form geladen werden. Mein Konstrukt funktioniert einwandfrei! Er ädt runter und erstellt auch die gleiche struktur auf meinem lokalen Verzeichnis, aber leider macht er das nur für einmal... soll heißen, er geht auf den server und lädt den ersten ordner samt inhalt sprich alles datein. Sind in diesem ordner Unterverzeichnisse saugt er nur den ersten davon. Mein Programmd ringt so lange in die Struktur ein bis es nicht mehr weiter geht, aber er geht leider nicht ein Verzeichnis zurück und lädt das nächste Unterverzeichnis.... Ich weiss nicht wie ich das Programmieren soll... Ich hoffe meine Ausführung war klar, wenn nicht fragt bitte ich suche dringen eine Antwort... Hier noch meine Classen bzw meine Form: Form: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; namespace Testftp { public partial class Form1: Form { private byte[] downloadedData; public string Ftp; public string User; public string Pw; public string Ftp_orig; string pfad = @"C:\Users\Swonson\Desktop\Testftp\Testftp\Testftp\download\"; public Form1() { InitializeComponent(); } private void Load_tb_Click(object sender, EventArgs e) { initFiles datei = new initFiles(); initDir ordner = new initDir(); Ftp_orig = FTPserver_tb.Text; Ftp = FTPserver_tb.Text; User = User_tb.Text; Pw = Pw_tb.Text; try { datei.GetFile(Ftp, User, Pw, pfad); ordner.GetDir(Ftp, User, Pw, pfad); } catch (Exception) { MessageBox.Show("Es ist ein Fehler im main-rudimentär aufgetreten!"); } } public void Dwn(string FTPAddress, string username, string password, string filename, string destination) { /*######################################## *######################################## * Dwn all *######################################## *######################################## * */ downloadedData = new byte[0]; try { FtpWebRequest request = FtpWebRequest.Create(FTPAddress + "/" + filename) as FtpWebRequest; ////Holt die Dateigrößen für die Progressbar request.Method = WebRequestMethods.Ftp.GetFileSize; request.Credentials = new NetworkCredential(username, password); request.UsePassive = true; request.UseBinary = true; request.KeepAlive = true; //hält die Connection offen int dataLength = (int)request.GetResponse().ContentLength; //hole Datei request = FtpWebRequest.Create(FTPAddress + "/" + filename) as FtpWebRequest; request.Method = WebRequestMethods.Ftp.DownloadFile; request.Credentials = new NetworkCredential(username, password); request.UsePassive = true; request.UseBinary = true; request.KeepAlive = false; //schließt die Connection //Progressbar update progressBar1.Value = 0; progressBar1.Maximum = dataLength; //lbProgress.Text = "0/" + dataLength.ToString(); //Streams FtpWebResponse response = request.GetResponse() as FtpWebResponse; Stream reader = response.GetResponseStream(); //Downloadenin Zwischenspeicher MemoryStream memStream = new MemoryStream(); byte[] buffer = new byte[1024]; //downloads while (true) { Application.DoEvents(); //Datein einlesen int bytesRead = reader.Read(buffer, 0, buffer.Length); if (bytesRead == 0) { progressBar1.Value = progressBar1.Maximum; //lbProgress.Text = dataLength.ToString() + "/" + dataLength.ToString(); Application.DoEvents(); break; } else { //Downloadstream puffern memStream.Write(buffer, 0, bytesRead); //Progressbar updaten if (progressBar1.Value + bytesRead <= progressBar1.Maximum) { progressBar1.Value += bytesRead; //text125.Text= progressBar1.Value.ToString() + "/" + dataLength.ToString(); //Status(); progressBar1.Refresh(); } } } //Eingehende Dateiinformation Ãn Byte speichern downloadedData = memStream.ToArray(); reader.Close(); memStream.Close(); response.Close(); if (downloadedData != null && downloadedData.Length != 0) { //Die gepufferten Byte in Dateiform bringen FileStream newFile = new FileStream(destination+ @"\" + filename, FileMode.Create); newFile.Write(downloadedData, 0, downloadedData.Length); newFile.Close(); } else { MessageBox.Show("Keine Datein gepuffert!"); } } catch (Exception) { MessageBox.Show("Es ist ein Fehler aufgetreten."); } //textData.Text = downloadedData.Length.ToString(); username = string.Empty; password = string.Empty; } } } Klasse 1: Holt ließt die Datein auf dem Server aus und übergibt sie der Funktion in der Form zum downloaden using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; namespace Testftp { public class initFiles { Form1 mainform = new Form1(); string sort; string[] words; int i = 0; public void GetFile(string FTPAddress, string username, string password, string pfad) { MessageBox.Show("GetFile geladen!"); try { FtpWebRequest request = FtpWebRequest.Create(FTPAddress) as FtpWebRequest; request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; request.Credentials = new NetworkCredential(username, password); request.UsePassive = true; request.UseBinary = true; request.KeepAlive = false; FtpWebResponse response = request.GetResponse() as FtpWebResponse; Stream responseStream = response.GetResponseStream(); StreamReader reader = new StreamReader(responseStream); while (!reader.EndOfStream) { sort = reader.ReadLine(); if (sort.StartsWith("-")) { words = sort.Split(' '); mainform.Dwn(FTPAddress, username, password, words[words.Length - 1], pfad); } } reader.Close(); responseStream.Close(); response.Close(); } catch (Exception) { MessageBox.Show("Es ist ein Fehler in der \n Klasse: 'initFiles' aufgetreten!"); } } } } klasse 2: Erstellt die Gefunden Ordner auf meinem Lokalen verzeichnis und speichert den Ordnerpfad. Aber genau hier liegt das problem, er geht wie gesagt nicht eine Ebene zurück.. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; namespace Testftp { class initDir { Form1 mainform = new Form1(); initFiles datein = new initFiles(); string sort; string[] words_dir; public void GetDir(string FTPAddress, string User, string Pw, string pfad) { MessageBox.Show("GetDir geladen!"); try { FtpWebRequest request = FtpWebRequest.Create(FTPAddress) as FtpWebRequest; request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; request.Credentials = new NetworkCredential(User, Pw); request.UsePassive = true; request.UseBinary = true; request.KeepAlive = false; FtpWebResponse response = request.GetResponse() as FtpWebResponse; Stream responseStream = response.GetResponseStream(); StreamReader reader = new StreamReader(responseStream); while (!reader.EndOfStream) { sort = reader.ReadLine(); if (sort.StartsWith("d")) { words_dir = sort.Split(' '); } } reader.Close(); responseStream.Close(); response.Close(); string Ftp = FTPAddress + "/" + words_dir[words_dir.Length - 1]; pfad += words_dir[words_dir.Length - 1] + @"\"; Directory.CreateDirectory(pfad); datein.GetFile(Ftp, User, Pw, pfad); } catch (Exception) { MessageBox.Show("Es ist ein Fehler in der \n Klasse: 'initDir' aufgetreten!"); } } } } Kann mir jemand helfen? Ich hoffe ich habe mein Problem klar dargelegt... Vielen Dank schonmal.. Beste Grüße Swonson Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2010 Teilen Geschrieben 4. Februar 2010 Vielen Dank Klotzkopp ersteinmal für deinen geistreichen Erguß....Gern geschehen. Immerhin hat es gereicht, dich aus der Reserve zu locken, und dich dazu zu bringen, zu zeigen, was du schon hast. Bist du wirklich sicher, dass dein Code die richtige Ordnerstruktur wieder herstellt? Es sieht mir mehr danach aus, als ob der Code Ordner, die eigentlich nebeneinander liegen sollten, untereinander anordnet. Ich glaube, der Code macht als aus folgender Struktur auf dem Server A +-B +-C[/code] das hier auf dem Client: [code] A +-B +-C Alle danach in A gefundenen Dateien werden auch in die zwischenzeitlich angelegten Unterordner verschoben. Das liegt daran, dass du die Pfade gefundener Ordner immer weiter hinten anhängst. Prüf das bitte mal. Ich denke, deine Aussage Mein Konstrukt funktioniert einwandfrei!stimmt nicht so ganz. Falls ich Recht habe, musst du den Code umbauen. Ohne Rekursion oder eine Liste von noch zu bearbeitenden Unterordnern wird's nicht gehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 4. Februar 2010 Autor Teilen Geschrieben 4. Februar 2010 Danke für den Hinweis, ich habe das geprüft und er stellt wirklich die richtige struktur dar. Ich bin gerade dabei an eine ArrayList zu bauen die alles gefunden abspeichert, samt pfad versteht sich. Danach habe ich vor diese Arraylist als "ToDo-List" meiner Downloadroutine zum abarbeiten zu geben... Macht das so Sinn? Oder ist eine ArrayList doof dafür? Falls ja, hättest du einen anderen Tipp für mich? Swonwon Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2010 Teilen Geschrieben 4. Februar 2010 Danke für den Hinweis, ich habe das geprüft und er stellt wirklich die richtige struktur dar. Stimmt, ich hatte das falsch interpretiert. Trocken-Debugging ist nicht immer ganz einfach. Das Hauptproblem liegt wohl hier: while (!reader.EndOfStream) { sort = reader.ReadLine(); if (sort.StartsWith("d")) { words_dir = sort.Split(' '); } }[/code] Wenn du nämlich mehrere Unterverzeichnisse findest, erwischst du dadurch nur das letzte. In dieser Schleife muss also mehr passieren. Ich sehe aber ehrlich gesagt immer noch nicht, wie dein Programm tiefere Unterordner finden soll. Ich sehe nur einen einzigen Aufruf von GetDir, die bei diesem Aufruf gefundenen Ordner legst du zwar an und durchsuchst sie nach Dateien, aber anscheinend nicht nach weiteren Unterordnern. Wie oft erscheint denn diese GetDir-MessageBox? Ich bin gerade dabei an eine ArrayList zu bauen die alles gefunden abspeichert, samt pfad versteht sich. Danach habe ich vor diese Arraylist als "ToDo-List" meiner Downloadroutine zum abarbeiten zu geben...Ja, das könnte funktioneren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 4. Februar 2010 Autor Teilen Geschrieben 4. Februar 2010 Verzeih, du hast recht -.- Ich seh langsam den Wald vor lauter Bäumen nicht... er erstellt in der Tat nur das letzte Unterverzeichnis und auch nur einmal... er dringt nicht tiefer ein... Sorry... Hast du ein Tipp, was mehr in dieser Schleife passieren soll? Ich sitzte langsam auf dem Trockenem... Dasmit der ArrayList ist mein letzter Rettungsanker... Wär schön wenn du vielleicht noch eine Idee hast bzw Tipps o.ä. Danke nochmal Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2010 Teilen Geschrieben 4. Februar 2010 Du kannst das grundsätzlich rekursiv oder iterativ lösen. Rekursiv würde bedeuten, dass du für jeden gefundenen Unterordner wieder GetDir aufrufst. Iterativ würde so aussehen, dass du eine Liste aller gefundenen Ordner anlegst. Diese Liste arbeitest du dann der Reihe nach ab: Findest du Dateien, kopierst du sie. Findest du Ordner, hängst du den Pfad zum Ordner hinten an die Liste. In beiden Fällen wäre es wohl einfacher, wenn du die Bearbeitung von Verzeichnissen und Dateien nicht trennen würdest. Letztendlich holst du ja zweimal dieselben Informationen vom Server. Einmal wirfst du die Informationen über die Dateien weg, einmal die über die Verzeichnisse. Wenn man das zusammenlegt, lässt sich das sicher effizienter umsetzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 4. Februar 2010 Autor Teilen Geschrieben 4. Februar 2010 Das Problem das ich sehe, wenn ich GetDir immer aufrufe wenn ich einen Ordner finde, nimmt er dann, wenn er zurück geht nicht wieder den selben ordner? Das mit der Liste wollte ich jetzt ja machen, ist leider wieder das selbe Problem ich versteh den Logischen schritt nicht den ich machen muss um eine ebene zurück zu gehen. Generell gebe ich dir recht, ich das zusammen zu schließen ist wesentlich sinnvoller effizienter... Wenn ich mit meinem oben genannten gedankengang falsch liege wie müsste der code dann im groben aussehn, könntest du mir das zeigen? Entweder stehe ich gerade aufm schlauch oder es ist schon zu spät... ich selectiere ja mit if (sort.StartsWith("d")) und if (sort.StartsWith("-")) nach datei und ordner... müsste nun dort if (sort.StartsWith("d")) ein GetDir aufruf ran? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 4. Februar 2010 Teilen Geschrieben 4. Februar 2010 @swonson: Machst du dies eigentlich zu Lernzwecken? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 4. Februar 2010 Autor Teilen Geschrieben 4. Februar 2010 Ja abgesehen von der freude am programmieren wieso!? Deswegen frage ich Grundsätzlich nach Tipp und Ansätzen... wieso fragst du ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 4. Februar 2010 Teilen Geschrieben 4. Februar 2010 Ich wollte nur sicher gehen, dass du dies jetzt nicht aus anderen Gründen programmierst. Es gibt ja Leute die nicht wissen, dass man das auch mit jedem FTP Client machen kann Dann werd ich mich wohl auch mal beteiligen, schreibe später nochmal. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 4. Februar 2010 Autor Teilen Geschrieben 4. Februar 2010 Nee das ist mir durchaus bewusst Alles kla Danke dir... Ich freue mcih über jede Hilfe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2010 Teilen Geschrieben 4. Februar 2010 Das mit der Liste wollte ich jetzt ja machen, ist leider wieder das selbe Problem ich versteh den Logischen schritt nicht den ich machen muss um eine ebene zurück zu gehen.Du musst nicht "zurück gehen". Du speicherst noch zu durchsuchende Pfade in der Liste. Und du arbeitest die Liste ab. Das ist alles. Wenn du im aktuellen Verzeichnis Unterverzeichnisse findest, hängst du hinten an die Liste den Eintrag "aktuelles_verzeichnis/gefundenes_unterverzeichnis" an und suchst weiter. So lange, bis du die Liste abgearbeitet hast. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Curry Geschrieben 6. Februar 2010 Teilen Geschrieben 6. Februar 2010 Hi, die Lösung für dein Problem ist nach bisschen Überlegung nicht allzu schwer. Rekursive Programmierung ist das Stichwort. Anders ausgedrückt: Du erstellst eine Methode mit dem Pfad als Parameter und lässt diese sich selbst wieder aufrufen für jeden Unterordner. Mfg, Curry Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 8. Februar 2010 Autor Teilen Geschrieben 8. Februar 2010 Ich hab mich die letzten beiden Tage damit intensiv beschäftigt und ich habs nicht hinbekommen ich werd, wenn ich zuhause bin mir deinen link anaschauen vielleicht raff ich dann ßbis später und danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 8. Februar 2010 Autor Teilen Geschrieben 8. Februar 2010 (bearbeitet) So Leute ich gebe auf... Mein Codeschnippsel an dem ich jetzt rumgewuscht hab, aber der nicht das tut was er soll: while (!reader.EndOfStream) { sort = reader.ReadLine(); if (sort.StartsWith("d")) { words_dir = sort.Split(' '); al.alarr(FTPAddress + "/" + words_dir[words_dir.Length - 1]); FTP2 = FTPAddress + "/" + words_dir[words_dir.Length - 1]; if (File.Exists(sFilename)) { StreamReader myFile = new StreamReader(sFilename, System.Text.Encoding.Default); while (!myFile.EndOfStream) { fRow++; if (FTP2 == myFile.ReadLine()) { myFile.Close(); reader.Close(); responseStream.Close(); response.Close(); GetDir(FTPAddress, User, Pw, pfad); } else { myFile.Close(); reader.Close(); responseStream.Close(); response.Close(); GetDir(FTP2, User, Pw, pfad); } } myFile.Close(); } } else if (sort.StartsWith("-")) { words = sort.Split(' '); al.alarr(FTPAddress + "/" + words[words.Length - 1]); } } Der restliche Code ist wie er war. al.alarr(FTPAddress + "/" + words_dir[words_dir.Length - 1]); Ist einfach ein Funktionsaufruf, welche den gefunden Pfad in eine Txt-Datei speichert. if (FTP2 == myFile.ReadLine()) { myFile.Close(); reader.Close(); responseStream.Close(); response.Close(); GetDir(FTPAddress, User, Pw, pfad); } else { myFile.Close(); reader.Close(); responseStream.Close(); response.Close(); GetDir(FTP2, User, Pw, pfad); } Soll im Groben nur in die Txt-Datei schaunu nd gucken ob es den Pfad schon gibt, falls ja, dann rufe die funktion erneut mit dem root vz auf (FTPaddress). Fals es ihn nicht gibt rufe die Funktion mit dem neuen VZ auf. Was im endeffekt in der Txt-Datei steht, und somit auch geladen und erstelt wird: ftp://xx.xx.xxx.xx:xx/. ftp://xx.xx.xxx.xx:xx/./. ftp://xx.xx.xxx.xx:xx/././. ftp://xx.xx.xxx.xx:xx/./././. ftp://xx.xx.xxx.xx:xx/././././. ftp://xx.xx.xxx.xx:xx/./././././. ftp://xx.xx.xxx.xx:xx/././././././. ftp://xx.xx.xxx.xx:xx/./././././././. Ich denke den Rest erspare ich euch. Man beachte! : der Punkt ist kein Platzhalter, den bekomme ich wirklich... Ich denke ma das ist aufm FTP, der "Zurück-Ordner" den man oben immer hat, aber ich weiss es nicht. Kann mir bitte jemand helfen !? Ich weiss nicht mehr weiter... kein stück! Kann mir jemand Codehilfe geben? Vielleicht eine ähnliche Funktion um es mir zu veranschaulichen oder so? Ich danke euch... Gruß Swonson Bearbeitet 8. Februar 2010 von swonson Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. Februar 2010 Teilen Geschrieben 8. Februar 2010 Ignoriere einfach die Verzeichnisse "." und ".." bei der Suche. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 8. Februar 2010 Autor Teilen Geschrieben 8. Februar 2010 Wie kann ich ich das machen ? Ich hatte das auch in betracht gezoegn, nur wie sage ich ihm das er das ignorieren soll und das danach nehmen soll? kla if(d=='.') { Genau hier hänge ich... wie sage ich ihm das er es ignorieren soll? } gruß Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. Februar 2010 Teilen Geschrieben 8. Februar 2010 Ich hatte das auch in betracht gezoegn, nur wie sage ich ihm das er das ignorieren soll und das danach nehmen soll?Indem du den if-Block leer lässt, und das, was ansonsten getan werden soll, in den else-Block schreibst. Oder indem du einfach die Bedingung umdrehst: if( words_dir[words_dir.Length - 1] != "." && words_dir[words_dir.Length - 1] != ".." ) { // Hier der ganze Code zur Verzeichnis-Bearbeitung }[/code] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 8. Februar 2010 Autor Teilen Geschrieben 8. Februar 2010 Okay, danke dir... die Punkte sind nun weg... jetzt kommt zwa noch ein Fehler nach dem erstenordner, aber den muss ich mir erstma anschauen... ich denke dir... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
swonson Geschrieben 12. Februar 2010 Autor Teilen Geschrieben 12. Februar 2010 Ihr dachtet bestimmt ich hab aufgegeben so... ich hab es soweit, das folgendes ergebnis rauskommt. xx.xx.xxx.xx:xx/_index.php xx.xx.xxx.xx:xx/Alea xx.xx.xxx.xx:xx/Alea/test xx.xx.xxx.xx:xx/Alea/test/Seite1 xx.xx.xxx.xx:xx/Alea/test/Seite1/background.jpg xx.xx.xxx.xx:xx/Alea/test/Seite1/foto.html xx.xx.xxx.xx:xx/Alea/test/Seite1/gedichte.html xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik/IMG_1197.jpg xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik/IMG_1217.jpg xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik/janin.jpg xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik/janin1.JPG xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik/janin2.jpg xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik/mama.JPG xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik/papa.jpg xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik/schatz.jpg xx.xx.xxx.xx:xx/Alea/test/Seite1/grafik/schatz1.jpg xx.xx.xxx.xx:xx/Alea/test/Seite1/index.html xx.xx.xxx.xx:xx/Alea/test/Seite1/janin.html xx.xx.xxx.xx:xx/Alea/test/Seite1/startseite.html Das ist allerding nur immer der erste Ordner. Also er geht in dern ersten Unterorder und schaut dort rein findet er wieder ein Unterordner geht er dort auch rein und soweiter bis es kein ordner mehr gibt, dann zeiht er alle datein. Problem ist, ich henge in einer endlosschleife, das er zwar ein einen ordner zurück geht, aber wieder den ersten nimmt anstatt den nächsten ordner und joa.. naja endlosschleife halt... Ich weiß natürlich was ich machen muss von der Logik her, aber von der syntax her nicht. kann mir bitte jemand helfen? Mir reicht ein schnippsel ich will garkeine komplettlösung... Code folgt: while (!reader.EndOfStream) { StreamReader Liste_reader = new StreamReader(sFilename, System.Text.Encoding.Default); sort = reader.ReadLine(); if (sort.StartsWith("d")) { words_dir = sort.Split(' '); string FTP3 = FTPAddress + "/" + words_dir[words_dir.Length - 1]; while (!Liste_reader.EndOfStream && words_dir[words_dir.Length - 1] != "." && words_dir[words_dir.Length - 1] != "..") { if (FTP3 == Liste_reader.ReadLine()) { treffer = true; break; } } if (!treffer) { if (words_dir[words_dir.Length - 1] != "." && words_dir[words_dir.Length - 1] != "..") { Liste_reader.Close(); // Hier der ganze Code zur Verzeichnis-Bearbeitung al.alarr(FTPAddress + "/" + words_dir[words_dir.Length - 1]); FTP2 = FTPAddress + "/" + words_dir[words_dir.Length - 1]; reader.Close(); responseStream.Close(); response.Close(); GetDir(FTP2, User, Pw, pfad); } } } else if (sort.StartsWith("-")) { words = sort.Split(' '); treffer = false; string FTP3 = FTPAddress + "/" + words[words.Length - 1]; while (!Liste_reader.EndOfStream) { if (FTP3 == Liste_reader.ReadLine()) { treffer = true; break; } } if (!treffer) { Liste_reader.Close(); al.alarr(FTPAddress + "/" + words[words.Length - 1]); } } Liste_reader.Close(); } reader.Close(); responseStream.Close(); response.Close(); if(FTP2!= "") { //MessageBox.Show("If FTP2 wurde geladen!"); goback = FTP2.Split('/'); back = FTP2.Replace("/" + goback[goback.Length - 1], ""); GetDir(back, User, Pw, pfad); } Die deklarierten variablen sind die selben wir in den vorherigen posts die die dazu gekommen deren funktion müsste ersichtlich sein. Ich weiß das der code nicht schön ist, das werde ich versuche nach zubessern wenn es denn endlich funktioniert. ich danke euch... Grüße Swonson Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 12. Februar 2010 Teilen Geschrieben 12. Februar 2010 Ich weiß natürlich was ich machen muss von der Logik her, aber von der syntax her nicht.Du hast kein Syntaxproblem, du hast ein Logikproblem. Wenn du ein Syntaxproblem hättest, würde sich der Compiler beschweren. Da dein Programm aber kompiliert und ausgeführt werden kann, kann nur ein Logikfehler vorliegen. Ich glaube übrigens, dass dir die Logik nicht klar ist. Du hast da anscheinend immer noch Code drin, um im Verzeichnisbaum wieder "zurück" zu gehen. Das brauchst du nicht. Weder bei der Listenvariante noch bei der Rekursionsvariante. Beschreib doch deinen Algorithmus mal auf Deutsch. Der Quellcode ist sehr unübersichtlich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.