Laufwerk hinzufügen, Speicher auslesen

  • VB.NET

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

    Laufwerk hinzufügen, Speicher auslesen

    Ich füge zurzeit wie folgt ein laufwerk hinzu und lese die Speicherkapazität aus.

    Spoiler anzeigen
    ​ Public Function NextAvailDrive() As String
    ' alle logischen Laufwerke
    Dim sDrives As String = Join(Directory.GetLogicalDrives(), "")
    Dim sNextDrive As String = ""

    ' nach 1. nicht verwendetes Laufwerk suchen
    ' beginnend ab C:
    For i As Integer = 68 To 90
    If Not sDrives.Contains(Chr(i) & ":") Then
    sNextDrive = Chr(i) & ":" : Exit For
    End If
    Next

    Return sNextDrive
    End Function
    Public Function AddNetworkDrive(ByVal Drive As String, _
    ByVal UncPath As String, _
    Optional ByVal Username As String = "", _
    Optional ByVal Password As String = "") As Boolean

    Dim p As New Process()
    Try
    With p.StartInfo
    .FileName = "net"
    If Username.Length > 0 Then
    ' Netzlaufwerk mit Benutzername und Kennwort erstellen
    .Arguments = String.Format("use {0} ""{1}"" /user:""{2}"" {3}", _
    Drive, UncPath, Username, Password)
    Else
    ' Netzlaufwerk ohne Benutzername und Kennwort erstellen
    .Arguments = String.Format("use {0} ""{1}""", Drive, UncPath)
    End If
    .UseShellExecute = False
    .CreateNoWindow = True
    End With
    p.Start()
    Return True

    Catch ex As Exception
    Return False
    End Try
    Application.DoEvents()
    End Function
    Public Sub RemoveNetworkDrive(ByVal Drive As String)
    Dim p As New Process()
    Try
    With p.StartInfo
    .FileName = "net"
    .Arguments = String.Format("use " & Drive & " /DELETE")
    .UseShellExecute = False
    .CreateNoWindow = True
    End With
    p.Start()
    Catch ex As Exception
    End Try
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    AddNetworkDrive(strDrive, "\\192.168.61.3\backup")

    Dim lw As New System.IO.DriveInfo(strDrive)
    Dim TotalFreeSpace As Long = lw.TotalFreeSpace
    Dim TotalSize As Long = lw.TotalSize
    Dim DriveSpaceUsed As Long = TotalSize - TotalFreeSpace
    la_ges.Text = Math.Round(TotalSize.ToString / 1024 / 1024 / 1024, 2)
    la_ben.Text = Math.Round(DriveSpaceUsed.ToString / 1024 / 1024 / 1024, 2)
    la_fre.Text = Math.Round(TotalFreeSpace.ToString / 1024 / 1024 / 1024, 2)
    la_proz.Text = Math.Round(1 - DriveSpaceUsed / TotalSize * -100, 2) & "%"

    ProgressBar1.Maximum = la_ges.Text
    ProgressBar1.Value = la_ben.Text
    RemoveNetworkDrive(strDrive)
    End Sub


    Jedoch habe ich das Prolbem das ich hier "AddNetworkDrive(strDrive, "\\192.168.61.3\backup")" Warten muss bis der Prozess beendet ist um mit dem Code weiterzufahren, gibt es hier eine gute Variante um zu warten? oder gibt es gar eine Möglichkeit die Kapazität auszulesen ohne den "Netzwerkordner" hinzuzufügen?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Function NextAvailDrive() As String
    2. ' alle logischen Laufwerke
    3. Dim sDrives As String = Join(Directory.GetLogicalDrives(), "")
    4. Dim sNextDrive As String = ""
    5. ' nach 1. nicht verwendetes Laufwerk suchen
    6. ' beginnend ab C:
    7. For i As Integer = 68 To 90
    8. If Not sDrives.Contains(Chr(i) & ":") Then
    9. sNextDrive = Chr(i) & ":" : Exit For
    10. End If
    11. Next
    12. Return sNextDrive
    13. End Function
    14. 'Funktion um Netzwerklaufwerke Hinzuzufügen
    15. Public Function AddNetworkDrive(ByVal Drive As String, _
    16. ByVal UncPath As String, _
    17. Optional ByVal Username As String = "", _
    18. Optional ByVal Password As String = "") As Boolean
    19. Dim p As New Process()
    20. Try
    21. With p.StartInfo
    22. .FileName = "net"
    23. If Username.Length > 0 Then
    24. ' Netzlaufwerk mit Benutzername und Kennwort erstellen
    25. .Arguments = String.Format("use {0} ""{1}"" /user:""{2}"" {3}", _
    26. Drive, UncPath, Username, Password)
    27. Else
    28. ' Netzlaufwerk ohne Benutzername und Kennwort erstellen
    29. .Arguments = String.Format("use {0} ""{1}""", Drive, UncPath)
    30. End If
    31. .UseShellExecute = False
    32. .CreateNoWindow = True
    33. End With
    34. p.Start()
    35. Return True
    36. Catch ex As Exception
    37. Return False
    38. End Try
    39. Application.DoEvents()
    40. End Function
    41. 'Funktion um Netzwerklaufwerk zu entfernen
    42. Public Sub RemoveNetworkDrive(ByVal Drive As String)
    43. Dim p As New Process()
    44. Try
    45. With p.StartInfo
    46. .FileName = "net"
    47. .Arguments = String.Format("use " & Drive & " /DELETE")
    48. .UseShellExecute = False
    49. .CreateNoWindow = True
    50. End With
    51. p.Start()
    52. Catch ex As Exception
    53. End Try
    54. End Sub
    55. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    56. 'Laufwerk zuweisen
    57. AddNetworkDrive(strDrive, "\\192.168.61.3\backup")
    58. Dim lw As New System.IO.DriveInfo(strDrive)
    59. Dim TotalFreeSpace As Long = lw.TotalFreeSpace
    60. Dim TotalSize As Long = lw.TotalSize
    61. Dim DriveSpaceUsed As Long = TotalSize - TotalFreeSpace
    62. 'Visualisierung
    63. la_ges.Text = Math.Round(TotalSize.ToString / 1024 / 1024 / 1024, 2)
    64. la_ben.Text = Math.Round(DriveSpaceUsed.ToString / 1024 / 1024 / 1024, 2)
    65. la_fre.Text = Math.Round(TotalFreeSpace.ToString / 1024 / 1024 / 1024, 2)
    66. la_proz.Text = Math.Round(1 - DriveSpaceUsed / TotalSize * -100, 2) & "%"
    67. ProgressBar1.Maximum = la_ges.Text
    68. ProgressBar1.Value = la_ben.Text
    69. RemoveNetworkDrive(strDrive)
    70. End Sub


    Ich hoffe es ist nun übersichtlich :)

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „schnibli“ ()

    jo, du könntest dem Code noch die sprache angedeihen lassen - [code=vbnet], dann hätteste auch noch bunte wörter.

    zur Frage: ich hab keine Ahnung, obs sinnvoll ist, ein Laufwerk zu adden, seine Kapazität auszulesen und dann wieder zu löschen - wusste auch nicht, dass das mit sonem komischen Process funktioniert - oder obs da besseres gibt.
    Jdfs wenn die derzeitige Methode das Gui zum Stillstand bringt, dann lässt sich das mittm Async/Await - Pattern leicht auflösen. Mein Problem ist, ich kann da kein Code für vormachen, weil nur VS2010.
    Guck ma inne Tutorials, obs da was zu gibt.