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
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.
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?
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.
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.
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.
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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden