[Gelöst]Wie finde ich heraus ob zwei verschiedene Ordner auf der selben physichen Festplatte sind oder nicht?

  • VB.NET

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

    [Gelöst]Wie finde ich heraus ob zwei verschiedene Ordner auf der selben physichen Festplatte sind oder nicht?

    Hallo leute,

    ich schreibe gerade ein Programm welches sein threading verhalten an die eingegebenen ordner anpasst, d.h. wenn die beiden ordner auf verschiedenen FESTPLATTEN sind sollen zwei threads die arbeit erledigen und wenn die beiden ordner auf der gleichen festplatte (auch wenn sie in unterschiedlichen Partitionen) gespeichert sind soll nur ein thread die arbeit machen.

    bis jetzt hab ich nur das:
    (noch nicht an die partitionen gedacht)

    VB.NET-Quellcode

    1. If Path.GetPathRoot(C.DTD_NewDir) <> Path.GetPathRoot(C.DTD_OldDir) Then
    2. multithreading = True
    3. Else
    4. multithreading = False
    5. End If


    wie kann ich nun auch noch herausfinden ob die ordner wirklich auf der gleichen festplatte sind, und nicht nur in unterschiedlichen partitionen?

    danke für eure hilfe

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

    @alex
    rekursive suche hat nichts damit zu tun, du hast mich vlt falsch verstanden.

    @singu, ja das hab ich mir auch schon gedacht aber system.io.driveinfo gibt nicht genug informationen zurück und mit WMI kenn ich mich noch nicht aus
    ich hab die Lösung gefunden, hat zwar etwas gedauert aber wenn man bisl sucht findet man auch was. Ich hab zwei VBS Beispiele die ich gefunden hab kombiniert und dann nach vb.net portiert und etwas modifiziert:

    VB.NET-Quellcode

    1. Public Function GetDriveInfo(ByVal path1 As String, ByVal path2 As String) As Boolean
    2. Dim NotOnTheSameDisk As Boolean = False
    3. Dim drive1 As String = Path.GetPathRoot(path1).Replace("\", Nothing)
    4. Dim drive2 As String = Path.GetPathRoot(path2).Replace("\", Nothing)
    5. If Drive1 <> Drive2 Then
    6. Dim PhyDisk1 As String = Nothing
    7. Dim PhyDisk2 As String = Nothing
    8. Dim wmiServices = GetObject("winmgmts:{impersonationLevel=Impersonate}!//.")
    9. Dim wmiDiskDrives = wmiServices.ExecQuery("SELECT Caption, DeviceID FROM Win32_DiskDrive")
    10. For Each wmiDiskDrive In wmiDiskDrives
    11. Dim query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" & wmiDiskDrive.DeviceID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"
    12. Dim wmiDiskPartitions = wmiServices.ExecQuery(query)
    13. For Each wmiDiskPartition In wmiDiskPartitions
    14. Dim wmiLogicalDisks = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & wmiDiskPartition.DeviceID & "'} WHERE AssocClass = Win32_LogicalDiskToPartition")
    15. For Each wmiLogicalDisk In wmiLogicalDisks
    16. If wmiLogicalDisk.DeviceID = Drive1 Then
    17. PhyDisk1 = wmiDiskDrive.DeviceID
    18. ElseIf wmiLogicalDisk.DeviceID = Drive2 Then
    19. PhyDisk2 = wmiDiskDrive.DeviceID
    20. End If
    21. Next
    22. Next
    23. Next
    24. If PhyDisk1 <> PhyDisk2 Then
    25. 'beide logischen Laufwerke sind auf unterschiedlichen Festplatten
    26. NotOnTheSameDisk = True
    27. Else
    28. 'beide logischen Laufwerke sind auf der gleichen Festplatte
    29. NotOnTheSameDisk = False
    30. End If
    31. End If
    32. Return NotOnTheSameDisk
    33. End Function


    diese Funktion ermittelt die Logischen Laufwerke der übermittelten Datei/Verzeichnis-Paths und überprüft ob sie auf der gleichen physischen Festplatte sind oder nicht und gibt dementsprechend einen bool'schen Wert zurück.

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