Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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?

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

Geschrieben

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.

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

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

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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