Zum Inhalt springen

swonson

Mitglieder
  • Gesamte Inhalte

    87
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von swonson

  1. swonson

    Threadproblem :(

    Moin meine Lieben, ich habe eine Wondiwsfom gebaut, welche ein Design bekommen hat. Ich hab den Rahmen natürlich weg gelassen und habe folgenden Code verwendet um zu ermöglichen, dass man die Form bewegen kann: protected override void WndProc(ref Message m) { base.WndProc(ref m); int WM_NCHITTEST = 0x84; if (m.Msg != WM_NCHITTEST) return; int HTCLIENT = 1; int HTCAPTION = 2; if (m.Result.ToInt32() == HTCLIENT) m.Result = (IntPtr)HTCAPTION; } Leider kann ich, wenn mein Programm arbeitet (etwas verarbeitet) meine Form nicht bewegen. Also ein Threadproblem ?! :confused: Desweiteren möchte multithreading in mein FTP-programm da ich mehrere Dinge gleichzeitig abarbeiten lassen möchte. Kann mir jemand ein gutes Tut für Winformsthreading posten. Ich weiss das man viele Threadingtuts aber keines welches ich gefunden habe, kann ich auf Winform anwenden. Kann mir jemand weiterhelfen !? Liebe Grüße Swonson
  2. Verzeiht ich hatte keine Zeit... und dann vergessen So hier wie versprochen der Code. So läuft er bei mir ohne Probleme. Vielen Dank nochmal an Klotzkopp und die Anderen vielen Dank für eure hilfe ihr seid super! 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.Net; using System.IO; using System.Collections; namespace WindowsFormsApplication10 { public partial class Form1 : Form { string sort; string[] words_dir; string[] words; string adresse = "ftp://xx.xxx.xx.xx/"; string User = "****"; string Pw = "****"; ArrayList al_test = new ArrayList(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { getlist(adresse); } public void getlist(string path) { FtpWebRequest request = FtpWebRequest.Create(path) as FtpWebRequest; request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; request.Credentials = new NetworkCredential(User, Pw); request.UsePassive = true; request.UseBinary = true; request.KeepAlive = true; FtpWebResponse response = request.GetResponse() as FtpWebResponse; Stream responseStream = response.GetResponseStream(); StreamReader reader = new StreamReader(responseStream); //sContent = Liste_reader.ReadToEnd(); //Liste_reader.Close(); try { while (!reader.EndOfStream) { sort = reader.ReadLine(); if (sort.StartsWith("d")) { words_dir = sort.Split(' '); if (words_dir[words_dir.Length - 1] != "." && words_dir[words_dir.Length - 1] != "..") { //al_test.Add(path + words_dir[words_dir.Length - 1] + "/"); vergleich(path + words_dir[words_dir.Length - 1] + "/"); } } else if (sort.StartsWith("-")) { words = sort.Split(' '); //al_test.Add(path + words[words.Length - 1]); vergleich(path + words[words.Length - 1]); } } foreach (string Item in al_test) { if (Item.EndsWith("/")) { reader.Close(); responseStream.Close(); response.Close(); al_test.Remove(Item); getlist(Item); } } StreamWriter Liste_writer = new StreamWriter(@"C:\Pfad zur Textdatei die die Liste beinhalten soll", true); foreach (string item2 in al_test) { Liste_writer.WriteLine(item2); } Liste_writer.Close(); } catch (InvalidOperationException) { MessageBox.Show("Zugriff fehlgeschlagen"); } MessageBox.Show("Liste ist fertig!"); } public void vergleich(string path_save) { bool ok = true; foreach (string Item in al_test) { if (Item == path_save) { ok = false; break; } } if (ok) { al_test.Add(path_save); } } } } Also so wird die Liste korrekt erstellt die man dann in die Download prozedur einbinden kann. gruß Swonson
  3. Ich habe scheinbar die lösung... Ich werde sie im laufe des nachmittags mal posten ich möchte erst noch prüfen ob es wirklich die lösung ist und ob jede strukutur egal wie tief gezogen wird. Wie gesagt heute post ich sie noch.
  4. Hier mal mein neuer gesamter code: 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.Net; using System.IO; using System.Collections; namespace WindowsFormsApplication10 { public partial class Form1 : Form { string sort; string[] words_dir; string[] words; string adresse = "****"; string User = "****"; string Pw = "****"; ArrayList al_test = new ArrayList(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { getlist(adresse); } public void getlist(string path) { FtpWebRequest request = FtpWebRequest.Create(path) as FtpWebRequest; request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; request.Credentials = new NetworkCredential(User, Pw); request.UsePassive = true; request.UseBinary = true; request.KeepAlive = true; 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(' '); if (words_dir[words_dir.Length - 1] != "." && words_dir[words_dir.Length - 1] != "..") { al_test.Add(path + words_dir[words_dir.Length - 1] + "/"); } } else if (sort.StartsWith("-")) { words = sort.Split(' '); al_test.Add(path + words[words.Length - 1]); } } foreach (string Item in al_test) { if (Item.EndsWith("/")) { reader.Close(); responseStream.Close(); response.Close(); getlist(Item); } } MessageBox.Show("Liste ist fertig!"); } } } So sieht mein Code nur noch aus, ich hab ihn stark reduziert, da ich eingesehen habe, das ich mich mit meinem anderen code nur verrenne... Wie gesagt generell bin ich der meinung, das es so gehen muss und das der richtige weg ist, da jede rekursion die ich im netz zum Thema "VZ durchsuchen" finde so oder sehr ähnlich aufgebaut ist. desweiten nehme ich stark an das Klotzkopp viel ahnung hat daher hab ich mich entschlossen mein code nur noch so aufzubauen. Leider habe ich das gleiche problem wie mit der ListBox. Er geht das erstemal ins erste Item, was ein ordner (Bei mir mit if (Item.EndsWith("/")) selektiert)ist und ruft damit die funktion neu auf. Wunderbar! Alles sieht gut aus, ausser das er es immer so macht und nicht das nächste item nimmt. Hat jemand eine Ahnung wie man dies ändern kann ?
  5. Function getdir( path ) For each x in readdir( path ) if x is dir and x != "." and x != ".." then list.add(x) if x is file then getfile( path + x) Next for each d in list getdir( path + d ) next leider hat dieser Code einen fehler, er sieht gut aus und ich dachte das wäre die lösung, aber problem ist die zweite foreachschleife... beim erstenmal funktioniert es wunderbar problem ist nur, nach dem sie die "getdir( path + d )" aufruft wird die "d in list" zurück auf anfang gesetzt, heißt also, er nimmt dann wieder das erste element und macht demnach das selbe ab dem 2 durchlauf. Hat jemand hier für eine lösung, generell glaube ich das dies wirklich der richtige weg ist, denn rein logisch sieht er gut aus, wenn man der liste jetzt nur noch sagen könnte das bereits eingelesene items nicht mehr gelesen werden soll wäre das wohl die richtige lösung. mal meien umsetzung: while (!reader.EndOfStream) { sort = reader.ReadLine(); if (sort.StartsWith("d")) { words_dir = sort.Split(' '); if (words_dir[words_dir.Length - 1] != "." && words_dir[words_dir.Length - 1] != "..") { listBox1.Items.Add(words_dir[words_dir.Length - 1] + "/"); } } else if (sort.StartsWith("-")) { words = sort.Split(' '); listBox1.Items.Add(words[words.Length - 1]); } } foreach (string Item in listBox1.Items) { if (Item.EndsWith("/")) { reader.Close(); responseStream.Close(); response.Close(); getlist(path + Item); } }
  6. könntest du mir das nochmal per pseudocode darstellen bitte? das würde mir sicher riesig herlfen, da ich garkeine idee hab wie ich es umsetzen soll...
  7. Okay es tut mir leid, dass ich unreichend infos erbracht habe. Form 1: 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; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } initDir ordner = new initDir(); private void Load_tb_Click(object sender, EventArgs e) { string Ftp_orig = FTPserver_tb.Text; string Ftp = FTPserver_tb.Text; string User = User_tb.Text; string Pw = Pw_tb.Text; ordner.GetDir(Ftp, User, Pw); MessageBox.Show("Ende"); } } } initDir: (Diese Funktion connectet und sortiert nach ordner und files, also die funktion um die es die ganze zeit ging) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; using System.Collections; namespace WindowsFormsApplication3 { class initDir { Testftp.alclass al = new Testftp.alclass(); string sort; string[] words_dir; string[] words; string FTP2; bool treffer = false; string sFilename = @"C:\Users\Swonson\Desktop\Testftp\Testftp\Testftp\download\Liste.txt"; public void GetDir(string FTPAddress, string User, string Pw) { 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 = true; 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(' '); if (words_dir[words_dir.Length - 1] != "." && words_dir[words_dir.Length - 1] != "..") { string Path = FTPAddress + "/" + words_dir[words_dir.Length - 1]; al.alarr(FTPAddress + "/" + words_dir[words_dir.Length - 1]); reader.Close(); responseStream.Close(); response.Close(); GetDir(Path, User, Pw); } } else if (sort.StartsWith("-")) { words = sort.Split(' '); al.alarr(FTPAddress + "/" + words[words.Length - 1]); } } } catch { MessageBox.Show("Fehler!"); } } } } alclass: (diese classe erstellt eine die url-list) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; using System.Collections; namespace Testftp { class alclass { ArrayList al_test = new ArrayList(); public void alarr(string dirpfad) { al_test.Add(dirpfad); StreamWriter Liste_writer = new StreamWriter(@"C:\Users\Swonson\Desktop\Testftp\Testftp\Testftp\download\Liste.txt", true); Liste_writer.WriteLine(dirpfad); Liste_writer.Close(); } } } Ja und das wars. Mehr hat mein programm nicht mehr... und mit diesem code bekomme ich folgende ausgabe: ich lade die datein von meinem rootserver auf dem ein ftp läuft... Ich schließe den reader, da er sonst wieder neu connectet und und mein user mehrfach auf dem server vorhanden ist und das geht nicht. Sind alles fragen beantwortet ? wenn nicht bitte fragen... ich danke dir aber dennoch schonmal für deine geduld, auch wenn sie sicherlich schon sehr strapaziert wird... gruß
  8. Die treffer variable und die list waren ein versuch es einfacher zu machen weil es jedes mal wieder ein kleine problem gelöst hat und ich ein stück weiter kam. Am anfang war es so gedacht, das er sofort alles downloadet was er sieht und zwa ohne list etc... ich raffs nicht mein code sieht wieder so aus while (!reader.EndOfStream) { sort = reader.ReadLine(); if (sort.StartsWith("d")) { words_dir = sort.Split(' '); if (words_dir[words_dir.Length - 1] != "." && words_dir[words_dir.Length - 1] != "..") { string Path = FTPAddress + "/" + words_dir[words_dir.Length - 1]; al.alarr(FTPAddress + "/" + words_dir[words_dir.Length - 1]); reader.Close(); responseStream.Close(); response.Close(); GetDir(Path, User, Pw); } } else if (sort.StartsWith("-")) { words = sort.Split(' '); al.alarr(FTPAddress + "/" + words[words.Length - 1]); } } Und meine ausgabe ist die gleiche, er bleibt im letzten verzeichnis hängen. Wie passt die foreachschleife rein? kannst du es mit bitte erklären was ich falsch mache? ich weiß es ist amstrengend, aber ich verstehs wirklich nicht -.- danke
  9. Mein Code müsste nun so aussehen oder? foreach (String x in reader.ReadLine()) { if(x.StartsWith("d")) { words_dir = sort.Split(' '); string Path = FTPAddress + "/" + words_dir[words_dir.Length - 1]; al.alarr(Path); GetDir(Path,User,Pw); } else if(x.StartsWith("-")) { words = sort.Split(' '); al.alarr(FTPAddress + "/" + words[words.Length - 1]); } } Es konnt ein fehler oben in der foreachbedingung: Kann mir jemand sagen, Wie ich den fehler weg bekomme ? ich dachte so müsste ich es machen. ?!
  10. Erstmal danke für den Code, ich werde ihn gleich anbauen und schaun ob es den sinn erfüllt. ich denke zwar, dass er das nicht tut, aber ich versuche es. Ich denke, dass der Code von dir wieder nur den ersten Ordner nimmt... Mein Gedanke für diesen Code war ein kompletter FTP spiegel. Ich wollte das mein Code Das root VZ scannd und alles abspeichert was er sieht. Dann sollte er in den ersten ordner und das selbe tun... Das solltre sich wiederholen bis er am ende angekommen ist. Als nächtes soll er eine eben zurück gehen und den nächsten ordner auswählen und das gleich tun... Das soll er solange machen bis ich alle datei + ordnerstruktur vorliegen habe. War diese aussage ausreichend? wenn nicht, bitte fragen... lg swonson
  11. Vorweg: Die boolsche variable 'treffer' ist ausschließlich um zu zeigen ob der jeweilige Pfad schon vorhanden ist also ob das programm schond rinne war. Der rest ist hoffentlich klar... Wenn nicht bitte fragen. while (!reader.EndOfStream) { StreamReader Liste_reader = new StreamReader(sFilename, System.Text.Encoding.Default); sort = reader.ReadLine(); if (sort.StartsWith("d")) { Durchsuche den FTP-Stream solange bis du am ende angekommen bist. Öffne dann die datei die als URL_liste dient. Lese eine Zeile ein und speicher sie in 'sort'. Wenn ie eingelesene Zeile mit einem 'd' (weil es dann ein ordner ist) beginnt gehe dann tue folgendes... words_dir = sort.Split(' '); string FTP3 = FTPAddress + "/" + words_dir[words_dir.Length - 1]; Splitte die eingelesen Zeile bei jedem Leerzeichen. Speichere den FTP-Adresspfad und den Gefunden ordnernamen is 'FTP3' ab. while (!Liste_reader.EndOfStream && words_dir[words_dir.Length - 1] != "." && words_dir[words_dir.Length - 1] != "..") { if (FTP3 == Liste_reader.ReadLine()) { treffer = true; break; } } Arbeite folgende schleife ab bis du am Ende der URL-list-datei bist und der Gefunden ordnernamen nicht mit einem '.' oder '..' beginnt. Wenn die Variable 'FTP3' bereits in dem Textdokument steht, dann setze die Variable 'treffer' auf true und breche die Schleife ab. 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); } } Wenn 'treffer' true ist dann tue folgendes... Wenn der gefundene Ordnernamen nicht '.' oder '..' ist dann tue folgendes... Schließe die oben geöffnete URL-list datei... Gehe in die Klasse 'alclass' und übergebe zugewiesene Variablen. Die Klasse 'alclass' schreibt den pfad + ordnernamen in die URL-Listdatei. Speichere den FTP-adress-pfad und den Ordnernamen in 'FTP2' ab. Schließe die FTP connecten und Rufe die Klasse 'GetDir' mit dem neuen Pfad der den neuen ordner enthällt auf. Sodass wir im neuen ordner sind. } else if (sort.StartsWith("-")) { words = sort.Split(' '); treffer = false; Falls kein ordner sondern eine Datei gefunden wurde also die Variable 'sort' mit einem '-' beginnt dann splitte die information und setzte die Variable 'treffer' auf true. string FTP3 = FTPAddress + "/" + words[words.Length - 1]; while (!Liste_reader.EndOfStream) { if (FTP3 == Liste_reader.ReadLine()) { treffer = true; break; } } Speichere den FTP-adresspfad und den Dateinamen in die variable 'FTP3'. tue dann solange folgendes bis die datei mit den URL's am ende ist. ist der Wert von 'FTP3' bereits in der Dateo vorhanerden dann setze die variable 'treffer' auf true und breche die schleife ab. if (!treffer) { Liste_reader.Close(); al.alarr(FTPAddress + "/" + words[words.Length - 1]); } } Liste_reader.Close(); Wenn 'treffer' false ist, dann schließe die URL-lst und rufe die Klasse 'alclass' mit den zugewiesenen Variablen auf. Schließe die datei falls sie offen ist. reader.Close(); responseStream.Close(); response.Close(); Schließe die verbindung mit dem FTP. if(FTP2!= "") { //MessageBox.Show("If FTP2 wurde geladen!"); goback = FTP2.Split('/'); back = FTP2.Replace("/" + goback[goback.Length - 1], ""); GetDir(back, User, Pw, pfad); } Wenn in 'FTP2' etwas drinne ist, dann splitte den pfad auf 'FTP2' und speiche die teile in goback. Speichere den neuen Pfad, in dem der letzte ordner fehlt ab und rufe die Funktion 'GetDir' mit den zugewisenen Variablen auf. Nun ist er einen Ordner zuvor und geht wieder in den gleich ordner, da er der erste ist. Ich verstehe nicht wie ich das anders lösen kann. Wenn ich die Funktion mit dem Original FTP-Pfad aufrufe bin ich dich wieder ganz am anfang und das ist doch falsch oder? Bitte erklärt es mir. Ich weiß es ist anstrengend und zeit ista bestimmt auch mangelware... aber mir ist es echt wichtig... Auch wenn es nicht so scheint, in der regel begreife ich auch recht schnell... Ich danke euch für die Hilfe bisher und hoffe es geht so weiter... Danke und liebe Grüße von Swonson
  12. Ihr dachtet bestimmt ich hab aufgegeben so... ich hab es soweit, das folgendes ergebnis rauskommt. 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
  13. 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...
  14. 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ß
  15. 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: 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
  16. 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
  17. Nee das ist mir durchaus bewusst Alles kla Danke dir... Ich freue mcih über jede Hilfe
  18. Ja abgesehen von der freude am programmieren wieso!? Deswegen frage ich Grundsätzlich nach Tipp und Ansätzen... wieso fragst du ?
  19. 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?
  20. 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
  21. 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
  22. Vielen Dank Klotzkopp ersteinmal für deinen geistreichen Erguß.... Mir ist klar das ich kein fertigen Code kriege deswegen ja auch 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
  23. 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
  24. 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
  25. Hi Leute, ich habe eine Frage zum oben genannten Thema... Ist es möglich, mit C# auf eine SQL-DB im internet zuzugriefen?! Wenn ja, kann mir jemand ein Beispiel nennen bitte, ich fginde dazu nicht und auch meine selfmade versuche sind in die hose gegangen... ich würde mich über jede hilfe freuen... grüße der Swonson

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...