PhilippVP Geschrieben 21. Februar 2014 Geschrieben 21. Februar 2014 Hallo Leute, ich brauche mal eure Hilfe. Und zwar habe ich das Problem das bei meinem bisherigen Vergleich der Inhalt einer Datei mit dem Inhalt eines Ordners verglichen wird. Was schon richtig ist, aber man geht ja nicht her und vergleicht die Datei mit dem Ordner sondern man nimmt ja die Dateien/Bilder aus dem Ordner und vergleicht diese mit einer/der externen Datei, dass ist ja von der Suche her viel schneller und effektiver. Hier mein bisheriger Code: System.IO.DirectoryInfo dInfo; System.IO.FileInfo fInfo; System.IO.StreamReader sReader; System.IO.StreamWriter swVergleichProtocolausgeben; 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 += DateTime.Now + " Bildbezeichnung ---> " + strFileName + ".jpg" + " Existiert ---> "; txtProtocol.Text += (from dFiles in dInfo.GetFiles() where dFiles.Name == strFileName + ".jpg" select dFiles).Count() > 0; txtProtocol.Text += Environment.NewLine; } Jetzt ist meine Frage wie kann ich den Vergleich umdrehen das er erst die Bilder im Ordner nimmt und diese mit der Datei vergleicht? Bin für jede Hilfe sehr dankbar. Mit freundlichen Grüßen Philipp Zitieren
Klotzkopp Geschrieben 21. Februar 2014 Geschrieben 21. Februar 2014 Zunächst solltest du dir dringend angewöhnen, deinen Code ordentlich einzurücken. Das sieht grauenhaft aus. Ich bin mir nicht sicher, was genau du beabsichtigst, aber es wäre vorteilhaft, wenn du GetFiles nur einmal, vor deiner Suchschleife aufrufst. Letztendlich musst du nur zwei Listen von Dateinamen gegeneinander abgleichen. Dafür gibt's fertige Funktionen. Zitieren
PhilippVP Geschrieben 21. Februar 2014 Autor Geschrieben 21. Februar 2014 Der Code ist im MS Visual C# 2010 richtig und ordentlich eingerückt er hat den Code nur so grauenhaft gemacht weil er vorher noch in einer Textdatei stande und er da verschoben wurde. Wie meinst du das mit der GetFiles Methode? Welche Funktion meinst du genau? Zitieren
Klotzkopp Geschrieben 21. Februar 2014 Geschrieben 21. Februar 2014 Wie meinst du das mit der GetFiles Methode?Du rufst GetFiles innerhalb deiner Suchschleife auf, also für jedes Element von lstFiles einmal. Das ist unnötig. Mach das vorher, leg das Ergebnis in einer Liste ab, und prüfe gegen diese Liste. Welche Funktion meinst du genau?Das kommt darauf an, welches Ergebnis du haben willst. Wenn du wissen willst, welche Namen in beiden Listen sind, brauchst du Enumerable.Intersect. Willst du wissen, welche in der einen, aber nicht in der anderen sind, brauchst du Enumerable.Except. Dazu solltest du aber zunächst dafür sorgen, dass du zwei Listen mit Strings hast, die Dateinamen enthalten. Die eine aus der Datei, die andere aus dem Verzeichnis. Wenn du das richtig anstellst, kommst du ganz ohne Schleifen aus. Zitieren
PhilippVP Geschrieben 21. Februar 2014 Autor Geschrieben 21. Februar 2014 Dein erster Absatz klingt für mich sehr logisch kannst du mir das mal anhand eines Beispiels von mir zeigen? wäre echt super von dir. Ich will wissen welche Dateien im Ordner liegen aber nicht in der Datei stehen und welche nicht identisch mit den Dateinamen in der Datei sind. Zitieren
Klotzkopp Geschrieben 21. Februar 2014 Geschrieben 21. Februar 2014 Ich will wissen welche Dateien im Ordner liegen aber nicht in der Datei stehen und welche nicht identisch mit den Dateinamen in der Datei sind. Was ist der Unterschied zwischen diesen beiden Fällen? Für mich ist das das gleiche. Gib mal Beispiele. Zitieren
lbm1305 Geschrieben 22. Februar 2014 Geschrieben 22. Februar 2014 Dein erster Absatz klingt für mich sehr logisch kannst du mir das mal anhand eines Beispiels von mir zeigen? wäre echt super von dir. foreach (string strFileName in lstFiles) { txtProtocol.Text += DateTime.Now + " Bildbezeichnung ---> " + strFileName + ".jpg" + " Existiert ---> "; txtProtocol.Text += (from dFiles in dInfo.GetFiles() where dFiles.Name == strFileName + ".jpg" select dFiles).Count() > 0; txtProtocol.Text += Environment.NewLine; } Bei jedem Schleifendurchlauf wird DirectoryInfo.GetFiles() aufgerufen. Ist wenig sinnvoll und unnötig. 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.