Zum Inhalt springen

Vergleich


PhilippVP

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...