tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Muepe32
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
864
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Ordos Ordos ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    4
    Hallo zusammen,

    ich versuche gerade ein Tool zu Schreiben, welches mir eine Auflistung von allen Dateien mit einer bestimmten Endung erstellt. Das Auflisten von Dateien habe ich soweit hinbekommen,
    dass jetzt die erste Ordnerebene von jedem Laufwerk durchsucht wird.

    Ich bekomme es aber nicht in, das die Unterordner dieser Ebene auch noch durchsucht wird.

    Hier ein Beispiel:

    C:\Test\test.txt -> wird gefunden.
    C:\Test\Test\test.txt -> wird nicht gefunden.

    Die Ordnerstruktur soll ganz durchgegangen werden. Also auch z.B C:\Test\Test\\Test\Test\Test\Test\Testtest.txt

    Kann sich das mal jemand anschauen?

    Danke

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
    using System;
    using System.IO;
    using System.Data;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        static class Program
        {
            /// <summary>
            /// Der Haupteinstiegspunkt für die Anwendung.
            /// </summary>
            [STAThread]
            static void Main()
            {
                int count = 0;
                string[] drives = new string[10];
     
                foreach (string s in Directory.GetLogicalDrives())
                {
                    count++;
                    drives[count] = s;
                }
     
                for (int counttemp = 1; counttemp <= count; counttemp++)
                {
                    try
                    {
                        MessageBox.Show(drives[counttemp]);
     
                        foreach (string d in Directory.GetDirectories(drives[counttemp]))
                        {
                            MessageBox.Show(d);
                            try
                            {
                                foreach (string f in Directory.GetFiles(d, "*.txt"))
                                {
                                    MessageBox.Show(f);
                                }
     
                            }
                            catch (UnauthorizedAccessException)
                            { }
                            finally { }
     
                        }
     
     
                    }
                    finally { }
     
                }
     
            }       
     
        }
    }
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Hi und Willkommen bei tutorials.de

    Du musst jeden gefundenen Ordner extra nocheinmal durchgehen; darin gefundene Ordner wieder...eine rekursive Methode sollte da hilfreich sein.
    Also eine, der du einen Ordner (Pfad) geben kannst und dieser durchsucht wird.
    Die gefundenen Dateien (mit passender Endung) dabei ausgeben (oder sonst was damit anstellen) und mit jedem gefundenen Ordner die Funktion selbst in sich wieder aufrufen.

    Gruß
     

  3. #3
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    354
    Huhu Ordos,

    Das .NET-Framework bietet bereits eine Methode für das, was du tun möchtest:
    Code csharp:
    1
    
    System.IO.Directory.GetFiles(@"C:\Test", "*.txt", System.IO.SearchOption.AllDirectories);
    sheel bedankt sich. 
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

  4. #4
    Ordos Ordos ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    4
    Hi ihr beiden,

    danke euch erstmal für die schnellen Antworten.
    Ich habe das ganze jetzt mal folgendermaßen angepasst:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    
    using System;
    using System.IO;
    using System.Data;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        static class Program
        {
            /// <summary>
            /// Der Haupteinstiegspunkt für die Anwendung.
            /// </summary>
            [STAThread]
            static void Main()
            {
                int count = 0;
                string[] drives = new string[10];
     
                foreach (string s in Directory.GetLogicalDrives())
                {
                    count++;
                    drives[count] = s;
                }
     
                for (int counttemp = 1; counttemp <= count; counttemp++)
                {
                Search(drives[counttemp]);   
                }
     
            }    
       
            public void Search(string drive)
            {
            try
                    {
                        MessageBox.Show(drive);
     
                        foreach (string d in Directory.GetDirectories(drive))
                        {
                            MessageBox.Show(d);
                            try
                            {
                                foreach (string f in Directory.GetFiles(d, "*.txt"))
                                {
                                    MessageBox.Show(f);
                                }
                                Search(d);
                            }
                            catch (UnauthorizedAccessException)
                            { }
                            finally { }
     
                        }
     
     
                    }
                    finally { }
            
            }
     
        }
    }

    Bekomme jetzt aber die Meldung:

    Fehler 1 Für das nicht statische Feld, die Methode oder die Eigenschaft "WindowsFormsApplication1.Program.Search(string)" ist ein Objektverweis erforderlich. C:\Users\Kevin\Documents\Visual Studio 2010\Projects\winws\winws\Program.cs 27 13 winws

    Was soll mir diese Meldung sagen? Was habe ich falsch gemacht?
    Kann mir das vielleicht noch jemnd von euch so anpasse, dass die Meldung nicht mehr kommt?

    @Muepe32 Danke, das werde ich mir Morgen mal anschauen.
     

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Das innere foreach mit dem GetFiles würde ich noch außerhalb (davor/danach, egal) des anderen foreach machen, sonst bindest du das Startverzeichnis nicht in die Suche mit ein.

    Und der Fehler mit dem static:
    Main ist static, Search nicht.
    Entweder schreibst du vor Search auf ein static, oder du legst in Main ein Objekt von Program an und rufst von diesem Search auf.

    @Muepe: Ich wusste, das es sowas gibt...aber zu faul zum Suchen

    Gruß
     

  6. #6
    Ordos Ordos ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    4
    Super, es funktioniert. Danke.

    Das einzige was jetzt komisch ist, ist das

    Code :
    1
    2
    3
    4
    5
    
    foreach (string f in Directory.GetFiles(d, "*.txt"))
                                {
                                    MessageBox.Show(f);
                                }
                                Search(d);

    Mir nicht nur *.txt files sondern auch Verzeichnisnamen ohne *.txt file am ende ausgibt.
     

  7. #7
    Ordos Ordos ist offline Grünschnabel
    Registriert seit
    Apr 2011
    Beiträge
    4
    Ich habe den Fehler gefunden :/

    Das liegt wohl an der Uhrzeit.

    Code :
    1
    
    MessageBox.Show(drive);

    Danke Euch beiden für Eure schnelle Hilfe.
     

Ähnliche Themen

  1. C# Directory.GetFiles Fehler
    Von NSR im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 30.04.11, 11:53
  2. c# - Directory.GetFiles() kein Zugriff => überspringen
    Von Samillon31112 im Forum .NET Windows Forms
    Antworten: 6
    Letzter Beitrag: 30.12.09, 13:17
  3. Directory.GetFiles(path,SearchPattern) !?
    Von axelfxxx im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 02.03.09, 14:55
  4. Getdirectories und Getfiles vb2008
    Von DerStauner im Forum .NET Windows Forms
    Antworten: 4
    Letzter Beitrag: 10.02.09, 22:13
  5. C# - Getfiles im selben Directory
    Von Alexander12 im Forum .NET Datenverwaltung
    Antworten: 3
    Letzter Beitrag: 23.10.05, 14:27