Nach bestimmter Ordnerstrucktur suchen ohne bestimmten Laufwerksbuchstaben

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Luchshot.

    Nach bestimmter Ordnerstrucktur suchen ohne bestimmten Laufwerksbuchstaben

    Nabend Miteinander,

    Wie bereits erwähnt möchte Ich nach einer bestimmten Ordnerstrucktur suchen die sich auf einem Netzlaufwerk befindet.
    An meinem Rechner zb. Z:\Alle\test123\

    Das Problem liegt darin, dass auf anderen Rechnern dieses Netlaufwerk nicht den Buchstaben "Z" hat sondern zb. "X".

    Ich habe also einen statischen Pfad der allerdings an jedem Rechner auf dem das Prog nacher laufen soll nen anderen Laufwerksbuchstaben hat.

    Alle Suchfunktionen die ich im Netz gefunden habe wirken allerdings genau andersherum und suchen in einem festgelegtem Laufwerk nach einer unbestimmten Datei.

    Einfch alle Laufwerke vollständig durchsuchen scheidet leider aus, da wie uns hier im knapp 10 Terrabyte bereich befinden.


    Vielen Dank im vorraus.

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

    Ich glaube jede Festplatte hat einen bestimmten "key", also einen Wert, der immer gleich ist. Den musst du versuchen auszulesen.

    EDIT: Hier steht, wie man die Seriennummer ausliest: emmet-gray.com/Articles/USB_SerialNumbers.htm (hoffe das ist das gleiche wie bei einem Netzlaufwerk...)
    Mfg
    Vincent

    Danke erstmal für die Beiden schnellen Denkanstöße.

    Werde Mich mal dranne setzen und Mich dann melden wenn Ich was neues habe.


    Soo mein vorläufiges Ergebnis:

    VB.NET-Quellcode

    1. For Each L As IO.DriveInfo In IO.DriveInfo.GetDrives
    2. If L.IsReady AndAlso L.DriveType = DriveType.Network Then
    3. If Directory.Exists(L.RootDirectory.ToString & "Alle\test123") Then
    4. ort = L.RootDirectory.ToString
    5. End If
    6. End If
    7. Next


    Ich hoffe das Ich richtig liege mit der Annahme, dass die "RootDirektory" Eigenschaft der Laufwersbuchstabe ist.
    kann es hier nicht Testen. Leider erst Morgen wieder auffer Arbeit.

    Fals ich also falsch liege bitte melden^^

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

    VB.NET-Quellcode

    1. Function GetDrive() As Char
    2. Dim c as Char, i as Integer
    3. For i = 91 to 65 Step -1
    4. c = Chr(i)
    5. If System.IO.Directory.Exists (c & ":\Alle\test123\") Then Return c
    6. Next
    7. Return ""c
    8. End Function
    Auch wenn die Verwendung von Chr einigen Schönheitsfanatikern nicht gefallen mag :P
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    @petaod: Die Funktion IO.DriveInfo.GetDrives() erfüllt das doch zu 100%. Warum erfindest Du sie neu?
    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!
    soooo....

    Wie erwartet haben beide Methoden ihren Dienst geleistet, wobei ich mich für die GetDrives Version entschieden habe.

    Nochmals einen hertzlichen Dank an alle fleißigen Helferlein und fals einer von euch in der nähe von Gütersloh wohnt komme ich vllt mal mit ner Kiste Bier um die ecke^^

    Der Vollständigkeit halber nochmal für die nachfolgenden Generationen der zur Lösung benutzte Code.

    VB.NET-Quellcode

    1. Dim Datum As String = CStr(Date.Today)
    2. Dim Uhrzeit As String = CStr(TimeOfDay)
    3. Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
    4. Dim ort As String = ""
    5. For Each L As IO.DriveInfo In IO.DriveInfo.GetDrives
    6. If L.IsReady AndAlso L.DriveType = DriveType.Network Then
    7. If Directory.Exists(L.RootDirectory.ToString & "Alle\Test123") Then
    8. ort = L.RootDirectory.ToString & "Alle\Test123\test.txt"
    9. End If
    10. End If
    11. Next
    12. If File.Exists(ort) = True Then
    13. TimerLogin.Enabled = False
    14. Dim fs As New StreamWriter(ort, True)
    15. fs.WriteLine(Datum & "_" & Uhrzeit & "_" & Environment.UserName)
    16. fs.Close()
    17. Me.Enabled = True
    18. Else
    19. LoginVersuche = LoginVersuche + 1
    20. If LoginVersuche > 10 Then
    21. TimerLogin.Enabled = False
    22. MsgBox("Login Fehlgeschlagen. Bitte Überprüfen sie ihre Netzwerkverbindung.")
    23. Me.Close()
    24. End If
    25. End If

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