PhilippVP Geschrieben 21. Januar 2014 Geschrieben 21. Januar 2014 Hallo alle zusammen, ich habe eine Frage zu meinem Problem an dem ich schon seit einer Woche fest hänge und einfach nicht mehr weiter komme. Ich hoffe Ihr könnt mir da helfen. Also ich will den Inhalt eines Ordners mit dem Inhalt einer Textdatei vergleichen. Beispiel: Im Ordner liegen 2 Bilder (123.jpg, 456.jpg) und in der Textdatei steht nur 123.jpg, jetzt soll das Bild (456.jpg) im Ordner in ein anderes verzeichnis verschoben werden, d. h. wenn ein Bild im Ordner liegt, aber nicht in der Textdatei vorhanden ist soll dieses Bild verschoben werden in ein anderes Verzeichnis. Habt ihr da mal eine Idee wie ich das machen kann? mein bisheriger Code ist dieser: System.IO.DirectoryInfo dInfo; System.IO.FileInfo fInfo; System.IO.StreamReader sReader; List<string> lstFiles; try { if (txtOrdnerPfad.Text.Length > 0 && txtOrdnerPfad.Text != _TxtFolderTextAtStartup && txtTextdateiPfad.Text.Length > 0 && txtTextdateiPfad.Text != _TxtTextFileAtStartup) { dInfo = new System.IO.DirectoryInfo(txtOrdnerPfad.Text); if (!dInfo.Exists) throw new NullReferenceException("Ordner existiert nicht oder ist schreibgeschützt"); fInfo = new System.IO.FileInfo(txtTextdateiPfad.Text); if (!fInfo.Exists) throw new NullReferenceException("Datei existiert nicht oder ist durch die Benutzung eines anderen Benutzer schreibgeschützt"); fInfo = null; sReader = new System.IO.StreamReader(txtTextdateiPfad.Text); lstFiles = new List<string>(); do { lstFiles.Add(sReader.ReadLine()); } while (!sReader.EndOfStream); foreach (string strFileName in lstFiles) { txtProtocol.Text += strFileName + " Existiert? --> "; txtProtocol.Text += (from dFiles in dInfo.GetFiles() where dFiles.Name == strFileName select dFiles).Count() > 0; txtProtocol.Text += Environment.NewLine; } Ich hoffe Ihr könnt mir helfen, bin für jede Hilfe dankbar. Mit freundlichen Grüßen Philipp Zitieren
SilentDemise Geschrieben 21. Januar 2014 Geschrieben 21. Januar 2014 Schreib doch mal auf, welches die notwendigen Schritte sind, um dein Problem zu lösen. 1. Dateinamen aus der Datei in eine Liste einlesen. 2. ... Zitieren
Jimbo0915 Geschrieben 21. Januar 2014 Geschrieben 21. Januar 2014 SilentDemise' Antwort ist wenig hinzuzufügen. Du solltest dir auf jeden Fall angewöhnen strukturiert zu arbeiten. So ein Spike hilft sicherlich immer, aber ohne Konzept verliert man schnell den Faden (bei Aufgaben dieser Größe natürlich eher nicht). Kleiner Tipp: StreamReader implementieren IDisposable. Optimalerweise nutzt die hier ein using Statement. Denke aber das ist noch etwas zu weit vom Thema her, kannst es aber bitte im Hinterkopf behalten bzw. deinen Ausbilder mal drauf ansprechen warum / wieso. LG Tobi Zitieren
PhilippVP Geschrieben 21. Januar 2014 Autor Geschrieben 21. Januar 2014 Also mien direktes Problem ist: In meiner textbox zur Ausgabe steht jetzt: 123.jpg Existiert ---> True 456.jpg Existiert ---> False und alle was ein False haben sollen in ein anderes Verrzeichnis verschoben werden, weil der Abgleich funktioiert so wie er sein soll. Hoffe Ihr könnt mir helfen. Philipp Zitieren
Klotzkopp Geschrieben 21. Januar 2014 Geschrieben 21. Januar 2014 Wo liegt denn das Problem? Weißt du nicht, wie man eine Datei verschiebt? Zitieren
PhilippVP Geschrieben 21. Januar 2014 Autor Geschrieben 21. Januar 2014 Nein verschieben weiss ich, aber was ich nicht weiss, wie ich an die Werte True und False komme und das in eine Schleife einbinde. Mit freundlichen Grüßen Philipp Zitieren
Klotzkopp Geschrieben 21. Januar 2014 Geschrieben 21. Januar 2014 Die Ausgabe True oder False ergibt sich aus (from dFiles in dInfo.GetFiles() where dFiles.Name == strFileName select dFiles).Count() > 0 Das ist ein bool-Ausdruck, den du so, wie er da steht, auch für ein where oder if benutzen kannst. Zitieren
PhilippVP Geschrieben 21. Januar 2014 Autor Geschrieben 21. Januar 2014 Kannst du mir da helfen? Es ist bestimmt total simpel und einfach, aber ich komme einfach nicht drauf Zitieren
Goulasz Geschrieben 21. Januar 2014 Geschrieben 21. Januar 2014 Kannst du mir da helfen? Es ist bestimmt total simpel und einfach, aber ich komme einfach nicht drauf Findest du nicht, dass man das in einem Jahr der Boardanwesenheit und diversen anderen Tipps hier langsam mal drauf haben sollte? Du bist doch in deiner Firma als Entwickler tätig, oder? Das bisschen Code ist nun wahrlich kein Hexenwerk, bei aller Liebe. Gruß, Goulasz P.S.: Verstehst du diesen LINQ-Ausdruck, den du zur Bestimmung der Booleschen Variable nutzt, überhaupt? Wenn nein, wo hast du den her und warum hast du ihn unreflektiert kopiert? Zitieren
lbm1305 Geschrieben 21. Januar 2014 Geschrieben 21. Januar 2014 Kannst du mir da helfen? Es ist bestimmt total simpel und einfach, aber ich komme einfach nicht drauf Im zweiten Post wurde Dir vorgeschlagen, den Ablauf in Worte zu fassen und ggf. als Aufzählung niederzuschreiben. Für jeden Punkt kann man dann den entsprechenden Code schreiben. Zitieren
PhilippVP Geschrieben 22. Januar 2014 Autor Geschrieben 22. Januar 2014 @Goulasz: Ich bin in miener Firma nicht nur als Entwickler tätig, ich habe noch viele andere Aufgaben, deshalb bleibt für die Prpgrammierung nur wenig Zeit und Luft. @Ibm1305: Danke nocheinmal für den Hinweis der gepostete Code von mir funktioniert nur für den Vergleich, aber ich weiss nicht wie ich an die Werte von True und False komme, die ich hinter jeden Existiert --> schreibe, das ist das einizige Problem weil wenn die Werte False sind soll er sie ja verschieben. Kannst du/ihr mir da helfen? Zitieren
lbm1305 Geschrieben 22. Januar 2014 Geschrieben 22. Januar 2014 (bearbeitet) schreibe doch mal bitte in punkten auf, welche schritte dein code macht? bspw. 1. dateinamen aus txt-datei auslesen (hier gibt es die möglichkeit, dies zeilenweise zu machen oder alle auf einmal) 2. für jeden dateinamen aus der datei ... 3. operationen auf den aktuell selektierten dateinamen ...und hier musst du jetzt überlegen, wie der ablauf aussehen soll. ansonsten kann man true und false auch als string ausgeben der großteil hier wird dir die lösung nicht vorkauen, weil es dann keinen lerneffekt hat. Bearbeitet 22. Januar 2014 von lbm1305 Zitieren
Goulasz Geschrieben 22. Januar 2014 Geschrieben 22. Januar 2014 Wenn du das LINQ-Statement in gesprochene Worte oder Pseudocode "umwandelst", wirst du sofort erkennen, nach welchen Kriterien "True" bzw. "False" gesetzt wird. Und falls du dich weiterhin so vehement dagegen sträubst, auf Hinweise einzugehen, die dazu dienen, dass du etwas lernst, kannst du ja weiterhin in einem der 2 anderen Foren, in denen du den selben Code ähnlich unselbstständig gepostet hast, bohren. Vielleicht ist da jemand williger, dir die Lösung vorzukauen. Ansonsten zitiere ich aus meiner Signatur: [...]What we are, unapologetically, is hostile to people who seem to be unwilling to think or to do their own homework before asking questions. People like that are time sinks — they take without giving back, and they waste time we could have spent on another question more interesting and another person more worthy of an answer.[...] Gruß, Goulasz Zitieren
Klotzkopp Geschrieben 22. Januar 2014 Geschrieben 22. Januar 2014 Kannst du mir da helfen? Es ist bestimmt total simpel und einfach, aber ich komme einfach nicht drauf bool machWasDamit = (from dFiles in dInfo.GetFiles() where dFiles.Name == strFileName select dFiles).Count() > 0; Zitieren
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.