115122
Goto Top

CSharp Festplatte nach bestimmtem Ordnernamen durchsuchen

Guten Tag face-smile

ich brauche als Bestandteil eines kleinen Programmes eine Funktion, welche meine Festplatte beispielsweise nach allen Ordnern mit dem Namen "Test" durchsucht.

Ich habe schon einiges ausgetestet, rekursive Suche, GetDirectories etc aber ich kriege es nicht so wirklich raus.

Vielleicht kann mir ja hier jemand helfen.

Vielen Dank schonmal in Voraus.

Grüße

Content-Key: 235750

Url: https://administrator.de/contentid/235750

Printed on: April 26, 2024 at 23:04 o'clock

Member: colinardo
Solution colinardo Apr 16, 2014, updated at Apr 17, 2014 at 07:17:30 (UTC)
Goto Top
Hallo zwieback,
durchsucht alle Unterordner eines angegebenen Verzeichnisses und gibt sie dir aus....Beim Ordner-Namen kannst du auch mit Wildcards arbeiten.
string dirs = System.IO.Directory.GetDirectories(@"c:\rootordner", "denOrdnerSucheIch", System.IO.SearchOption.AllDirectories);  
if (dirs.Length > 0)
{
    foreach (String dir in dirs)
    {
        MessageBox.Show(dir);
    }
}
else
{
    MessageBox.Show("Keinen Ordner gefunden!");  
}
Grüße Uwe
Member: SlainteMhath
SlainteMhath Apr 16, 2014 at 13:42:21 (UTC)
Goto Top
Moin,

google, <10 sec, erster Treffer:

http://support.microsoft.com/kb/303974

lg,
Slainte
Mitglied: 115122
115122 Apr 16, 2014 at 13:53:26 (UTC)
Goto Top
Ja so ähnlich hatte ich das auch schon, jedoch meint er bei mir, wohl wegen der "alldirectories" suchoption, dass ich nicht genügend Rechte besitze, was ich aber als Administrator definitiv haben sollte, oder ?
Mitglied: 115122
115122 Apr 16, 2014 at 13:55:58 (UTC)
Goto Top
Zitat von @SlainteMhath:

Moin,

google, <10 sec, erster Treffer:

http://support.microsoft.com/kb/303974

lg,
Slainte

Da war ich auch schon, mein Kommentar mit den Rechten trifft ebenso hier zu.
Member: colinardo
Solution colinardo Apr 16, 2014, updated at Apr 17, 2014 at 07:17:35 (UTC)
Goto Top
Zitat von @115122:

Ja so ähnlich hatte ich das auch schon, jedoch meint er bei mir, wohl wegen der "alldirectories" suchoption, dass
ich nicht genügend Rechte besitze, was ich aber als Administrator definitiv haben sollte, oder ?
Nein, nicht auf alle Ordner, z.B. "c:\SystemVolumeInformation"

In diesem Fall musst du die Recursion manuell machen und die Unauthorized-Exception bei jedem Ordner-Aufruf mit einem Try-Catch Konstrukt abfangen:
http://stackoverflow.com/questions/172544/ignore-folders-files-when-dir ...

Grüße Uwe
Mitglied: 115122
115122 Apr 17, 2014 at 06:53:39 (UTC)
Goto Top
Guten Morgen ;)

habe das Problem jetzt für mein Programm gelöst, oder es funktioniert zumindest so wie ich will.

Hier mal der Ausschnitt:

String ordner = Directory.GetDirectories("C:\\", "Test");  
foreach (string ordnername in ordner)
            {
                gefunden.lbGefundeneOrdner.Items.Add(ordnername);
            }

Er schaut nun nach dem Ordner Test auf der lokalen Platte, falls er ihn findet, schreibt er den Pfad in eine Listbox.

Da der zu suchende Ordner nur unter C:\ , C:\Program Files\ oder C:\Program Files (x86) liegen kann, ist das hier für mich die einfachste Lösung.

Kleines Extra. Wenn einer der Ordner unter einem Pfad gefunden wird, soll dieser über einen Button gelöscht werden können.
Hier mal mein Code:

private void btnLöschen_Click(object sender, EventArgs e)
        {
            string pfad = Convert.ToString(lbGefundeneOrdner.SelectedItem);
            //MessageBox.Show("Pfad: " + pfad); 
            if (Directory.Exists(pfad))
            {
                try
                {
                    Directory.Delete(pfad, true);
                }

                catch (IOException f)
                {
                    MessageBox.Show(f.Message);
                }
            }
        }

Brauche ich hier noch bestimmte Parameter, die mir das Recht zum löschen geben ? Bekomme wieder gemeldet, dass ich nicht die nötigen Rechte besitze.
Als Admin starten hilft übrigens nicht. ;)

Vielen vielen Dank für eure bisherige Hilfe.
Member: colinardo
colinardo Apr 17, 2014 updated at 07:16:00 (UTC)
Goto Top
Hi,
der ProgramFiles Ordern ist wieder speziell, hier kommt die UAC ins Spiel. Dazu musst du deine App "elevated" starten. Wie du dies machen kannst steht hier:
http://stackoverflow.com/questions/2282448/windows-7-and-vista-uac-prog ...

Bestimmte Ordner musst du erst in deinen Besitz nehmen bevor du sie löschen kannst.

Eventuell enthält der Ordner auch andere Dateien bei denen die Vererbung unterbrochen ist und du keine Rechte auf bestimmte Dateien hast. Dann musst du zunächst die Rechte entsprechend rekursiv anpassen.

Grüße Uwe
Mitglied: 115122
115122 Apr 17, 2014 at 07:17:01 (UTC)
Goto Top
Zitat von @colinardo:

Hi,
der ProgramFiles Ordern ist wieder speziell, hier kommt die UAC ins Spiel. Dazu musst du deine App "elevated" starten.
Wie du dies machen kannst steht hier:
http://stackoverflow.com/questions/2282448/windows-7-and-vista-uac-prog ...

Bestimmte Ordner musst du erst in deinen Besitz nehmen bevor du sie löschen kannst.

Eventuell enthält der Ordner auch andere Dateien bei denen die Vererbung unterbrochen ist und du keine Rechte auf bestimmte
Dateien hast. Dann musst du zunächst die Rechte entsprechend rekursiv anpassen.

Grüße Uwe

Bedankt, werde mir das mal reinföhnen. ;)
Member: colinardo
colinardo Apr 17, 2014 updated at 12:42:45 (UTC)
Goto Top
Hab dir dazu mal eine Demo gebaut, die du hier herunterladen kannst: FindFoldersProject_235750.zip. Im ZIP-File findest du die fertige EXE und das VS2010 Projekt.

Du startest die Anwendung mit Rechtsklick "Als Admin starten". Dann kannst du nach Ordnern suchen, beachte dabei das du in der Suchbox mit Regular-Expressions arbeiten kannst. Die Ordner die die Anwendung wegen fehlender Zugriffsrechte nicht durchsuchen kann werden, falls welche vorhanden, werden dir am Ende der Suche angezeigt. Um einen Ordner zu löschen markiere Ihn in der Listbox und drücke die ENTF-Taste. Die Anwendung übernimmt vorsorglich den Besitz des Ordners inkl. Unterordner mit takeown wenn dieser gelöscht werden soll.

Vielleicht hilft dir das etwas weiter in deinem Projekt.

Grüße Uwe

p.s. Das Programm erhebt keinen Anspruch auf Vollständigkeit...
Mitglied: 115122
115122 Apr 17, 2014 at 13:00:26 (UTC)
Goto Top
Zitat von @colinardo:

Hab dir dazu mal eine Demo gebaut, die du hier herunterladen kannst:
FindFoldersProject_235750.zip. Im ZIP-File findest
du die fertige EXE und das VS2010 Projekt.

Du startest die Anwendung mit Rechtsklick "Als Admin starten". Dann kannst du nach Ordnern suchen, beachte dabei das du
in der Suchbox mit Regular-Expressions arbeiten kannst. Die Ordner die die Anwendung wegen fehlender Zugriffsrechte nicht
durchsuchen kann werden, falls welche vorhanden, werden dir am Ende der Suche angezeigt. Um einen Ordner zu löschen markiere
Ihn in der Listbox und drücke die ENTF-Taste. Die Anwendung übernimmt vorsorglich den Besitz des Ordners inkl.
Unterordner mit takeown wenn dieser gelöscht werden soll.

Vielleicht hilft dir das etwas weiter in deinem Projekt.

Grüße Uwe

p.s. Das Programm erhebt keinen Anspruch auf Vollständigkeit...

Wow, vielen Dank, werde mir das gleich mal anschauen.