GetFiles verweigert zugriff auf Ordner ???

  • Allgemein

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von PingelPaul.

    GetFiles verweigert zugriff auf Ordner ???

    Hallo,

    Ich habe gerade ein Problem und zwar durschsuche ich mit Getfiles bestimmte Ordner und Unterordner nachbestimmten Dateien.

    So und gerade wo die Suche anfängt schmeißt der mich gleich mit Exceptions voll z.b:


    VB.NET-Quellcode

    1. System.UnauthorizedAccessException wurde nicht behandelt.
    2. Message=Der Zugriff auf den Pfad "C:\Documents and Settings" wurde verweigert.
    3. Source=mscorlib
    4. StackTrace:
    5. bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    6. bei System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
    7. bei System.IO.DirectoryInfo.GetFiles(String searchPattern, SearchOption searchOption)
    8. bei Wabbo.FrmMain.SearchForDublicates(DirectoryInfo oDir) in C:\Users\Wohnzimmer\Desktop\Wabbo\Wabbo\Wabbo\FrmMain.vb:Zeile 171.
    9. bei Wabbo.FrmMain.SearchForDublicates(DirectoryInfo oDir) in C:\Users\Wohnzimmer\Desktop\Wabbo\Wabbo\Wabbo\FrmMain.vb:Zeile 233.
    10. bei Wabbo.FrmMain.dt() in C:\Users\Wohnzimmer\Desktop\Wabbo\Wabbo\Wabbo\FrmMain.vb:Zeile 79.
    11. bei System.Threading.ExecutionContext.runTryCode(Object userData)
    12. bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
    13. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    14. bei System.Threading.ThreadHelper.ThreadStart()
    15. InnerException:


    Das Versteh ich aber nicht denn ich bin als Administrator angemeldet, Programm besitzt Admin rechte und sonst auch keine einschränkungen?!

    Hier ein sehr kleiner code schnipsel:

    VB.NET-Quellcode

    1. Dim oSubDir As IO.DirectoryInfo
    2. Dim oFile As IO.FileInfo
    3. 'Hier beginne ich alle Dateien aufzuspüren..
    4. For Each oFile In oDir.GetFiles()
    5. '.....


    MFG.

    Sinlyu.

    Sinlyu schrieb:

    ich glaube schon das ich darauf zugriff habe.
    Ich wette, dass nicht.

    "Documents and Settings" ist ein versteckter Ordner. Geschieht nicht ohne Grund.
    Anhang: Zugriff bei mir auf besagtes Verzeichnis mit dem Windows-Explorer.

    Sinlyu schrieb:

    ich will aber wissen warum ich kein Zugriff habe!

    Weil man manche Windows-Benutzer vor sich selbst schützen muss. Nicht in jedem Verzeichnis hat man etwas verloren. (Fühl' dich hier nicht persönlich angesprochen).
    Bilder
    • Unbenannt.PNG

      36,33 kB, 470×201, 232 mal angesehen
    Ich habe auf diese keinen Zugriff: "Documents and Settings" und "Dokumente und Einstellungen".
    Das wird alles nach C:\Users\... gemappt, und da kannst Du zugreifen.
    Teste es im Explorer oder so.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Genau, das ist eine der wenigen Gelegenheiten, ein Try / Catch sinnvoll einzusetzen.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo zusammen,
    ich hole diesen Beitrag noch einmal nach oben, da ich mit der Lösung noch ein Problem habe.
    Ich habe wie oben vorgeschlagen die Try und die Methode verwendet, bekomme die Fehlermeldung
    bezgl. der Zugriffsverweigerung nach wie vor. Was mache ich falsch:

    VB.NET-Quellcode

    1. Dim FolderSize As Long = 0
    2. For Each Datei As String In Directory.GetDirectories(parameter(1), "*.*", SetUnterverz)
    3. Debug.Print(Datei)
    4. Try
    5. FolderSize = 0
    6. For Each UDatei As String In Directory.GetFiles(Datei, "*.*", SearchOption.AllDirectories)
    7. Try
    8. FolderSize += New FileInfo(UDatei).Length
    9. Catch ex As Exception
    10. End Try
    11. Next
    12. If MaxVolume > 0 And (CSng(Math.Ceiling((FolderSize / 1024 / 1024) * 100)) / 100) > MaxVolume Then
    13. Console.Write(Datei & " - " & CSng(Math.Ceiling((FolderSize / 1024 / 1024) * 100)) / 100 & " MB" & vbCrLf)
    14. End If
    15. Catch Ex As System.UnauthorizedAccessException
    16. Continue For
    17. End Try
    18. Next
    @PingelPaul Willkommen im Forum. :thumbup:
    Um welches Verzeichnis handelt es sich?
    Offensichtlich hast Du nicht das Recht, darauf zuzugreifen.
    Starte Dein Programm mal mit Administratorrechten.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Bevor jemand fragt:
    parameter(1) enthält das zu durchsuchende Verzeichnis. In diesem Fall C:\
    SetUnterverz enthält 0 oder 1 je nachdem ob Unterverzeichnisse durchsucht werden sollen oder nicht

    Weitere Info: Es handelt sich um ein konsolenprogramm, das später via Batch aufgerufen werden soll.

    @ RodFromGermany : Auch als Admin ausgeführt... genau das gleiche.

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

    @PingelPaul Offensichtlich hast Du das Wirken von Try / Catch nicht verstanden.
    Dies verhindert nicht das Auftreten von Exceptions, sondern es fängt spezifische Exceptions ab, so dass Dein Programm darauf reagieren kann, ohne dass das Programm beendet wird.
    Wenn Du in Deinem Programm ausgibst, wann der Zugriff auf ein Verzeichnis erlaubt bzw. verboten ist, wirst Du das erkennen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim parameter = "C:\"
    2. Dim SetUnterverz As SearchOption = SearchOption.TopDirectoryOnly
    3. Dim MaxVolume As Long = 10000000000
    4. Dim FolderSize As Long = 0
    5. For Each Datei As String In Directory.GetDirectories(parameter, "*.*", SetUnterverz)
    6. Try
    7. FolderSize = 0
    8. For Each UDatei As String In Directory.GetFiles(Datei, "*.*", SearchOption.TopDirectoryOnly) '.AllDirectories)
    9. Try
    10. FolderSize += New FileInfo(UDatei).Length
    11. Catch ex As Exception
    12. End Try
    13. Next
    14. 'If MaxVolume > 0 And (CSng(Math.Ceiling((FolderSize / 1024 / 1024) * 100)) / 100) > MaxVolume Then
    15. ' Console.Write(Datei & " - " & CSng(Math.Ceiling((FolderSize / 1024 / 1024) * 100)) / 100 & " MB" & vbCrLf)
    16. 'End If
    17. Console.Write(Datei)
    18. Catch Ex As System.UnauthorizedAccessException
    19. Console.Write(Datei & " - verweigert")
    20. Continue For
    21. End Try
    22. Next
    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).
    Programmierfragen über PN / Konversation werden ignoriert!