Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Ordner Durchsuchen, mit der Regel einen bestimmten Ordner dabei nicht zu durchlaufen
CsharpJB
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

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

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16148

beantworten | zitieren | melden

[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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

[Snippet] Verzeichnisse und Dateien rekursiv durchlaufen

kannst du auch mal anschauen.
private Nachricht | Beiträge des Benutzers
CsharpJB
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

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");
                           }
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von p!lle am .
private Nachricht | Beiträge des Benutzers
CsharpJB
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

@Pille, wie mache ich es dann jetzt richtig?
du hattest nicht geschrieben, wie es richtig funktionieren könnte, oder habe ich was verpasst :D
private Nachricht | Beiträge des Benutzers
Jamikus
myCSharp.de - Member



Dabei seit:
Beiträge: 251
Herkunft: Oberhausen (NRW)

beantworten | zitieren | melden

Was funktioniert an deinen Code nicht?


[Artikel] Debugger: Wie verwende ich den von Visual Studio?
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

Ich meinte damit, dass dein Code aus meiner Sicht richtig ist (ohne das jetzt selbst einmal laufen zu lassen).
private Nachricht | Beiträge des Benutzers
CsharpJB
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

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

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
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Zitat von Abt
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.
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von p!lle am .
private Nachricht | Beiträge des Benutzers