Alle Dateien auf C: finden

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    Alle Dateien auf C: finden

    Ich wollte ein kleines Programm schreiben, das alle Dateien (also auch die in allen Unterverzeichnissen) mit Pfad in ein Textdokument schreibt. Ich hab das zuerst damit versucht:

    VB.NET-Quellcode

    1. Module Main
    2. Sub Main()
    3. System.IO.File.AppendAllLines("Alle Dateien.txt", IO.Directory.EnumerateFileSystemEntries("C:\", "*", IO.SearchOption.AllDirectories))
    4. MsgBox("Alle Dateien erfolgreich geschrieben")
    5. End Sub
    6. End Module


    Das funktioniert eigentlich ganz gut, nur irgendwann treten Ausnahmen auf, weil das Programm (auch mit Administratorrechten) nicht auf bestimmte Ordner zugreifen kann. Ich habe versucht, das Problem mit "Try" oder "On Error Resume Next" zu lösen, aber dann bricht das Programm nach dieser Datei ab und schreibt nicht weiter.

    :?: Wie kann ich es machen, dass das Programm Dateien, auf die es nicht zugreifen kann sozusagen "ignoriert" :?:

    kinsi schrieb:

    als erstes, wozu zum teufel?
    Weil ich einfach eine Liste mit allen Ordnern und Dateien haben will.

    kinsi schrieb:

    es gibt auch ordner wo du garnicht drauf zugreifen darfst, nur mit system rechten
    Ich will die ja nicht bearbeiten oder so sondern nur den Namen anzeigen lassen. Und wenn solche Systemordner nicht in der Liste dabei sind, ist das auch kein Problem. Deshalb ist die Frage ja auch, wie ich solche Dateien überspringen kann, ohne direkt das Programm zu beenden.
    Hallo, ich weiß ja net wie Dein Auflistalgo aussieht, aber bei mir funktionierts mit folgendem Skelett (grob):

    VB.NET-Quellcode

    1. Try
    2. For Each blabla As blabla In blabla
    3. Try
    4. 'Ordner , Dateien oder was auch immer Du auflistest
    5. Catch ex As Exception
    6. End Try
    7. Next
    8. Catch u As UnauthorizedAccessException
    9. End Try


    mfg OnkelR
    Wenn du das im VB Code benötigst ist mein Post offtopic .

    Sonst würd ich sowas spontan über ne bat datei lösen

    tree "<Pfad>" /f /a > Liste.txt

    Also wie gesagt wenns nur ne reine anzeige ist , würde es so glaube ich deutlich schneller und komfortabler gehen
    Hi,

    ich krame das Thema mal wieder aus, weil es mich gerade betrifft...
    Folgender Code:

    VB.NET-Quellcode

    1. For Each file In di.GetFiles(SuchbegriffTextBox.Text, IO.SearchOption.AllDirectories)
    2. Try
    3. Dim fi As New System.IO.FileInfo(file.FullName)
    4. tb.Rows.Add({fi.Name, fi.FullName, fi.CreationTime, fi.LastWriteTime})
    5. Catch ex As UnauthorizedAccessException
    6. Continue For
    7. End Try
    8. Next

    Leider wirft er trotzdem den Error. Er springt garnicht in den Try-Block rein. Bin ich deppert oder was muss ich tun?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    dein Catch fängt halt nur die SecurityException.

    Tatsächlich ist IO.SearchOption.AllDirectories praktisch nicht verwendbar, denn bei Dateisuchen treten in bestimmten Directories unabwendbar Fehler auf, und wenn man die catcht, dann bricht dennoch die komplette Suche ab, was meist nicht im Sinne des Erfinders ist.
    Man muss sich selbst eine rekursive Routine schreiben, wenn man möchte, dass die Suche trotz Zugriffs-Verweigerung bestimmter Ordner zumindest für die anderen Ordner weiter geht.
    Rekursive Dateisuche mit anonymer Methode

    MemoAnMichSelbst schrieb:

    was muss ich tun?
    Pack den Code aus der Form_Load in eine Button_Click.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @ErfinderDesRades Das ist sehr schade... Aber danke für die Info.
    @RodFromGermany Es ist in keiner Load-Sub. Anscheinend löst die For-Each den Fehler aus, also muss ich die komplette For mit dem Cath abwürgen oder der Error fliegt.
    Werde dann wohl selber ne Rekursive Suche basteln.

    Danke für die Info.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Anscheinend löst die For-Each den Fehler aus
    Probier doch mal im Explorer die einzelnen Verzeichnisse anzuklicken, da kommst Du halt in einige nicht rein.
    Also musst Du zuerst alle Verzeichnisse holen und dann einzeln über diese iterieren.
    Wenn Du da rausfliegst, nimmst Du dann das nächste.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Schon lange im Thread gewesen ;)
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D