Abfrage ob Datei in einem versteckten Ordner liegt

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von xtts02.

    Abfrage ob Datei in einem versteckten Ordner liegt

    Hi,

    kennt jemand eine Funktion die prüft ob eine Datei in einem versteckten Ordner liegt? Ob die Datei selber versteckt ist, kriege ich ja anhand der Flags raus, aber ob eine Datei in einem versteckten Ordner liegt, das weiß ich leider nicht...

    Jemand schon einmal eine solche Funktion gesehen?
    Okay. Der prüft zwar brav, ob das direkte Verzeichnis darüber versteckt ist, aber leider auch nur das. Das heißt, wenn die Datei in einem Ordner liegt, welcher wiederum in einem versteckten Ordner liegt, dann kriege ich das nicht mit.
    Ich bräuchte im Grunde eine Funktion, die alle Ordner bis zum Ursprung prüft... Und die Tiefe der Struktur ist im Vorfeld nicht zu erkennen. Erst wenn man den Dateipfad hat.

    Ich habe mal ne kleine Funktion geschrieben aber ab und zu erkennt er den AppData nicht als versteckt... Und ich weiß nicht wieso...

    VB.NET-Quellcode

    1. Friend Function OrdnerVersteckt(ByVal dateipfad As String) As Boolean
    2. Dim dateipfadNew As String = dateipfad
    3. For i = 1 To dateipfadNew.Split("\").Length - 1
    4. Dim ordnerInfo As New DirectoryInfo(dateipfadNew)
    5. If ordnerInfo.Attributes.ToString.Split("Hidden").Length - 1 = 1 Then
    6. Return True
    7. Exit Function
    8. End If
    9. dateipfadNew = ordnerInfo.Parent.FullName
    10. Next
    11. Return False
    12. End Function

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Hempelchen“ ()

    Das Problem auch da ist, dass ich im Vorfeld die Ordnertiefe nicht kenne. Es muss in der Funktion ja jeder Ordner geprüft werden und ich weiß im Vorfeld nicht wieviele Übergeordnete Verzeichnisse dieser hat. Deshalb habe ich mir die Schleife gebastet...

    Dann nervt es noch dass er "C" als VERSTECKT erkennt XD Was mal definitiv nicht so ist oO
    Hmm also ich hab mir jetzt alle Funktionen die ich da so sehe durchgelesen... aber ich sehe da nur die Infos über die Unterverzeichnisse und die Möglichkeit ins darüber gelegene Verzeichnis zu springen...
    Wobei ich die Anzahl der Unterverzeichnisse mit einem Instr auf "\" glaub ich wesentlich einfacher herausfinden kann.

    Hempelchen schrieb:

    Wobei ich die Anzahl der Unterverzeichnisse mit einem Instr auf "\" glaub ich wesentlich einfacher herausfinden kann.

    Mumpitz ...

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim s As String = Application.ExecutablePath
    3. Dim di As New IO.DirectoryInfo(s)
    4. If IsHidden(di) Then
    5. Debug.Print("Is Hidden")
    6. End If
    7. End Sub
    8. Private Function IsHidden(ByVal di As IO.DirectoryInfo) As Boolean
    9. If (di.Attributes And IO.FileAttributes.Hidden) = IO.FileAttributes.Hidden Then Return True
    10. If di.Parent IsNot Nothing Then
    11. Return IsHidden(di.Parent)
    12. Else
    13. Return False
    14. End If
    15. End Function
    Damit kriege ich IMMERNOCH nicht heraus wie tief der Pfad ist...
    Wobei das Abfragen von hidden mir hilft.
    Habe dennoch eine Schleife mit der Abfrage über die Anzahl der "\" gemacht. Damit kriege ich die Ordnertiefe nunmal sehr leicht raus und kann in einer Schleife jeden übergeordneten Ordner prüfen.

    Danke dir.

    Hempelchen schrieb:

    Immer bei C wirft deine Funktion ein Hidden raus

    Die Funktion kann nix dafür, wenn dieses Attribut gesetzt ist.
    Will man das für "root" umgehen, ändert man halt einfach auf:

    VB.NET-Quellcode

    1. If (di.Attributes And IO.FileAttributes.Hidden) = IO.FileAttributes.Hidden Then
    2. Return Not (di.FullName = di.Root.ToString)
    3. End If

    Der Rest bleibt gleich.

    Hempelchen schrieb:

    Wobei ich die Anzahl der Unterverzeichnisse mit einem Instr auf "\" glaub ich wesentlich einfacher herausfinden kann.

    Wenn Du die beiden Links aus Posting #4 und die Beiträge von pico aufmerksam gelesen hast, dann weiss Du, dass es völlig unötig ist, den Pfad mit den Methoden aus der String-Klasse auseinander zu nehmen. Hier ein Beispiel, wie es funktionieren könnte:

    VB.NET-Quellcode

    1. Dim fi As New IO.FileInfo("C:\Test1\Test2\Test3\Test4\Test5.ext")
    2. Dim di As IO.DirectoryInfo = fi.Directory
    3. While di.FullName <> di.Root.FullName
    4. If di.Attributes = IO.FileAttributes.Hidden Then Debug.WriteLine(di.FullName & " Is Hidden!")
    5. di = di.Parent
    6. End While