Ich füge zurzeit wie folgt ein laufwerk hinzu und lese die Speicherkapazität aus.
Spoiler anzeigen
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?
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
' 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?