Laden...

Ordner Durchsuchen, mit der Regel einen bestimmten Ordner dabei nicht zu durchlaufen

Erstellt von CsharpJB vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.805 Views
C
CsharpJB Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren
Ordner Durchsuchen, mit der Regel einen bestimmten Ordner dabei nicht zu durchlaufen

Hallo liebe Community,

Meine Frage ist folgende, ich bekomme es nicht hin, dass ich bei einem rekursiven Durchlauf der Ordner, einen bestimmten Ordner, den der User vorher angegeben hat, auszulassen.

also als Beispiel:

der User gibt an, dass der Ordner Musik nicht durchlaufen werden soll, dieser Order Musik hat aber 10 Unter-Ordnern, dann macht das Programm, dass schon richtig, dass er die Daten im Ordner Musik nicht anfasst, aber leider die Daten in den Unter-Ordnern.
ich will, dass er dann auch die Unterordner auslässt und nicht nur den Ordner Musik.
Er soll dann beim nächsten Ordner, auf der gleichen ebene weiter machen.

Ich weiß nicht wie ich ihm sagen kann, dass er auch die unter Ordner auslassen soll für das angegeben Verzeichnis vom User.

Danke euch und hoffe auf eine Antwort.

ich habe leider für mein Problem keine Lösung hier finden können, oder habe es nicht geschafft das richtige zu finden.

Ich habe das in diesem Bereich gepostet, da ich das ganze in einer Windows Form Anwendung Programmiere.

16.807 Beiträge seit 2008
vor 8 Jahren

[Tutorial] Bäume durchlaufen mit Rekursion (und Alternativen)

Hinzu kommt dann eben noch eine Abfrage auf den Ordnername, der exkludiert werden soll.
Den dann einfach zB. mit continue überspringen.

Den Ansatz haste ja; aber mehr ohne den Code zu sehen kann ich jetzt nicht helfen.

2.207 Beiträge seit 2011
vor 8 Jahren
C
CsharpJB Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren

Ich hatte beide von euch geschickten Links durchgeschaut, aber irgendwie nicht verstanden, wie ich das jetzt handhaben soll.

Mein Code ist folgender


 foreach (string d in Directory.GetDirectories(SucherPfad))
                       {
                           if (d != Pfadauslassen)
                           {
                               try
                               {
                                   foreach (string f in Directory.GetFiles(d, "*.*", SearchOption.AllDirectories).Where(s => Formatendungen.Contains(Path.GetExtension(s).ToLower())))
                                   {
                                       if (Path.GetDirectoryName(f) != Pfadauslassen)
                                       {

                                           //MessageBox.Show(f);
                                           if (File.Exists(Speicherpfad + "\\" + Path.GetFileName(f)))
                                           {
                                               // i++;
                                               doppelteTitel.Add(f);
                                               //doppelteTitel[i] = f;
                                               // MessageBox.Show(String.Format("Die Datei {0} existiert bereits und wurde übersprungen", f));
                                           }
                                           else
                                               File.Copy(f, Speicherpfad + "\\" + Path.GetFileName(f));

                                       }
                                       //lstFilesFound.Items.Add(f);

                                   }
                                   //DirSearch(d);
                               }
                               catch (System.Exception excpt2)
                               {
                                   MessageBox.Show(excpt2.Message);
                               }
                           }
                           else
                           {
                               MessageBox.Show("er ist in den Else Zweig gegangen");
                           }
1.040 Beiträge seit 2007
vor 8 Jahren

Aus meiner Sicht sollte es so funktionieren, wie du es dir vorstellst.

Du durchläufst ja nur die Ordner auf einer Ebene, hast dann ein Ausschlusskriterium für einen Ordner.
Greift das nicht, werden alle Dateien des Ordners und der Unterordner kopiert (wenn sie nicht schon kopiert worden sind).

Dein zweites if

if (Path.GetDirectoryName(f) != Pfadauslassen)

ist mMn überflüssig.

C
CsharpJB Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren

@Pille, wie mache ich es dann jetzt richtig?
du hattest nicht geschrieben, wie es richtig funktionieren könnte, oder habe ich was verpasst 😄

J
251 Beiträge seit 2012
vor 8 Jahren

Was funktioniert an deinen Code nicht?

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

1.040 Beiträge seit 2007
vor 8 Jahren

Ich meinte damit, dass dein Code aus meiner Sicht richtig ist (ohne das jetzt selbst einmal laufen zu lassen).

C
CsharpJB Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren

ja ich habe doch geschildert, was mich daran stört. Er läuft ja auch 😄

aber was mich stört ist, dass ich zwar sagen kann, dass er den einen Ordern auslassen soll, aber ich will auch das alle unter Ordner von dem ausgewählten Order ausgelassen werden, wie ist das möglich, wenn das nicht geht, wäre ich auch dankbar, für eine Idee, wie der User mehrere Ordner auswählen kann, sprich mit markieren und ich die in einer LIST? eventuell abfragen kann um diese dann nicht durch zu laufen.

Gruß
JB

2.207 Beiträge seit 2011
vor 8 Jahren

Hinzu kommt dann eben noch eine Abfrage auf den Ordnername, der exkludiert werden soll.
Den dann einfach zB. mit continue überspringen..

Was ist daran das Problem? Die Unterordner? Kannst ja das Parent oder alle Parents abfragen und dementsprechend reagieren. Oder du exkludierst erst alle Ordner auf Top-Level, die du nicht willst und holst dir dann alle übrigen mit Unterordnern.

1.040 Beiträge seit 2007
vor 8 Jahren

Nochmal: Dein Code funktioniert genau so, wie du es dir vorstellst!

Mit

Directory.GetDirectories(string path)

werden KEINE Unterordner eingelesen, nur die Ordner auf der Ebene des Pfades.

Mit

if (d != Pfadauslassen)

lässt du dann einen speziellen Ordner aus.

Die Dateien aus den Unterordnern werden erst bei

Directory.GetFiles(d, "*.*", SearchOption.[B]AllDirectories[/B])

berücksichtigt. Im Fall des ausgelassenen Ordners kommt er aber gar nicht an diese Stelle.

EDIT: In deinem ersten Beitrag schreibst du etwas von "rekursiv" - du hast in dem geposteten Code keinerlei Rekursion. Also entweder fehlt etwas oder wir reden aneinander vorbei.