Alle Festplatten/Partitionen auflisten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    Alle Festplatten/Partitionen auflisten

    Hi!

    Ich versuche mir mit einem kleinen "Heimprojekt" etwas VB beizubringen. Ich hänge jetzt an folgendem Problem:
    Ich brauche eine Auflistung aller Festplatten, die an einem Rechner angeschlossen sind, und zwar unabhängig davon, ob ihnen Laufwerksbuchstaben zugeordnet sind oder nicht. Letztlich möchte ich gerne anhand der Seriennummer oder noch besser anhand der GUID überprüfen, ob bestimmte Laufwerke angeschlossen bzw. verfügbar sind.

    Am Besten wäre sowas:
    Laufwerk 0: - Name: C:\ - Serial: 1234567890 - GUID: 12345678-1234-1234-1234-1234567890AB - Partition: Harddisk0, Partition1
    Laufwerk 1: - Name: #Keiner# Serial: 1234567890 - GUID: 12345678-1234-1234-1234-1234567890AB - Partition: Harddisk0, Partition1
    Laufwerk 2: ...

    Leider scheitere ich ich gerade daran ;(

    Mit (sorry, der Code ist etwas umständlich gestrickt)

    VB.NET-Quellcode

    1. Dim diDrives() As DriveInfo
    2. diDrives = DriveInfo.GetDrives
    3. Dim strResult As String = "", i As Integer
    4. For i = 0 To UBound(diDrives)
    5. If diDrives(i).IsReady Then strResult = strResult & "VolumeLabel: " & diDrives(i).VolumeLabel & Chr(13) Else strResult = strResult & "Drive " & i & " is not ready" & Chr(13)
    6. Next


    bekomme ich nur die logischen Laufwerke (mit Laufwerksbuchstaben). Alternativ hab' ich es mal so versucht:

    VB.NET-Quellcode

    1. Dim strResult As String
    2. Dim searchDrives As ManagementObjectSearcher
    3. searchDrives = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
    4. 'searchDrives = New ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk where DriveType=3")
    5. Dim mocDrives As ManagementObjectCollection
    6. mocDrives = searchDrives.Get()
    7. Dim moDrive As ManagementObject
    8. Dim i As Integer
    9. For i = 0 To mocDrives.Count - 1
    10. moDrive = mocDrives(i)
    11. If moDrive("SerialNumber") IsNot Nothing Then strResult = strResult & "SerialNumber: " & moDrive("SerialNumber").ToString & Chr(13) & Chr(13)
    12. If moDrive("Tag") IsNot Nothing Then strResult = strResult & "Tag: " & moDrive("Tag").ToString & Chr(13)
    13. 'If moDrive("VolumeSerialNumber") IsNot Nothing Then strResult = strResult & "VolumeSerialNumber: " & moDrive("VolumeSerialNumber").ToString & Chr(13)
    14. 'If moDrive("VolumeName") IsNot Nothing Then strResult = strResult & "VolumeName: " & moDrive("VolumeName").ToString & Chr(13)
    15. Next



    Dabei bekomme ich aber nur für "SerialNumber" und "Tag" überhaupt ein Ergebnis. Wenn ich als Suchstring "SELECT * FROM Win32_LogicalDisk where DriveType=3" verwende, dann bekomme ich aber natürlich wieder keine nicht-gemounteten Festplatten.
    Stelle ich mich einfach doof an, oder ist das wirklich so kompliziert?
    Hallo Erfinder,

    Danke für den Link. Ich bin übers Access/Excel-VBA zu VB gekommen und mir ist bei der Lektüre Deines Postings klar geworden, dass ich besser zwischen VB.net und VBA differenzieren muss. Allerdings muss ich jetzt erstmal einiges an Arbeit in mein "Projekt" stecken, um das Gelesene umzusetzen.

    Natürlich bin ich dennoch an einem Tipp interessiert, wie ich an die Daten der, sagen wir mal, nicht gemounteten Laufwerke komme.
    also das Framework bietet eiglich die Methode

    ObjectBrowser schrieb:

    Public Shared Function GetDrives() As System.IO.DriveInfo()
    Member of System.IO.DriveInfo
    Summary:
    Retrieves the drive names of all logical drives on a computer.
    Ob das auch "nicht gemounteten Laufwerke" (was immer das sein mag) einschliesst weiss ich nicht, weil kann ich hier nicht testen.

    Jdfs - wenn ja - kannst du daran sehen, dass eiglich ungeheuer viel fixnfertig im Framework vorbereitet vorliegt, und die vordringliche Herausforderung ist, sich das KnowHow anzueignen, mit dem man sich die gewaltige Unterstützung ühaupt erschliessen kann.
    Womit wir bei einem anneren, quasi umfassendern Link herauskommen: Lernplan für Visualstudio und DotNet

    ErfinderDesRades schrieb:

    (was immer das sein mag)
    Wenn Du ein Handy anschließt um Bilder rüberzukopieren, kann es sein, dass da kein Laufwerk gemounted wird, das Handy muss dann über seinen Namen im Explorer angesprochen werden.
    @ai5g Ich nehme mal an, dass Du genau so was meinst.
    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!
    Was auch noch als Lauferk gilt, aber eventuell nicht gemountet ist, ist ein USB Stick, der über rechte Maustaste "Auswerfen" ausgeworfen wurde, aber noch im Notebook steckt.
    Da gibt es aber imho keinen Zugriff drauf, auch nicht über die DriveInfo.
    "Hier könnte Ihre Werbung stehen..."