Moin,
ich habe meine Netzlaufwerke verloren ... via DriveInfo.GetDrives() lasse ich mir alle Laufwerke liefern die im Rechner vorhanden sind ... funktioniert auch - nur eben nicht bei Netzlaufwerken ... die werden ignoriert ... selbst wenn ich das Netzlaufwerk direkt instanziere new DriveInfo("K:") funktioniert es nicht ... im Explorer ist das Laufwerk geöffnet und ich kann darauf zugreifen
wen im Framework muss ich bearbeiten das mir meine Netzlaufwerke (sind 3 Stück) angezeigt werden 🤔
hand, mogel
Evtl. mit WMI, s. Use WMI to get drive information from local, network and mapped drives
bzw. Laufwerke und Laufwerkstypen ermitteln
Ansonsten geht das auch recht einfach mit:
for(char c = 'A'; c <='Z'; c++)
{
DriveInfo di = new DriveInfo(c.ToString());
bool istNetzwerk = (di.DriveType == DriveType.Network);
}
Aber was meinst du genau mit "verloren"?
mit WMI werde ich es dann am Montag versuchen - an nativ hatte ich auch schon gedacht
Ansonsten geht das auch recht einfach mit:
for(char c = 'A'; c <='Z'; c++) { DriveInfo di = new DriveInfo(c.ToString()); bool istNetzwerk = (di.DriveType == DriveType.Network); }
das klappt nicht ... hatte ich auch schon gemacht ... instanziere mal DriveInfo für ein Laufwerk was Du nicht hast (B:\ oder so) ... das ist dann das Gleiche wie bei mir für ein Netzlaufwerk ... sprich - für .NET existieren die Netzlaufwerke einfach nicht
Aber was meinst du genau mit "verloren"?
das ich die Dinger nicht über .NET finde 😃
super ...
Sub TestDriveSpace()
'http://msdn.microsoft.com/en-us/library/aa394592(VS.85).aspx
Dim objWMI As Object
Dim colDisks As Object
Dim objDisk As Object
Dim strDriveType As String = "unsued"
objWMI = GetWMIService
' determine free space
colDisks = objWMI.ExecQuery _
("Select * from Win32_LogicalDisk")
For Each objDisk In colDisks
With objDisk
Try
Debug.WriteLine("DeviceID: " & .DeviceID)
' assume GB
Debug.WriteLine("Size: " & Format(.Size / 1000000000, "# GB"))
' assume GB
Debug.WriteLine("Free Disk Space: " _
& Format(.FreeSpace / 1000000000, "# GB"))
Debug.WriteLine("% Free: " & Format(.FreeSpace / .Size, "Percent"))
' http://msdn.microsoft.com/en-us/library/aa394173(VS.85).aspx
Select Case .DriveType
Case 0
strDriveType = "Unknown"
Case 1
strDriveType = "No Root Directory"
Case 2
strDriveType = "Removable Disk"
Case 3
strDriveType = "Local Disk"
Case 4
strDriveType = "Network Drive"
Case 5
strDriveType = "Compact Disc"
Case 6
strDriveType = "RAM Disk"
End Select
Debug.Print("Drive Type: " & strDriveType)
If (strDriveType = "Local Disk") Or (strDriveType = "Network Drive") Then
Debug.WriteLine("File System: " & .FileSystem)
End If
If strDriveType = "Network Drive" Then
Debug.WriteLine("Provider Name: " & .ProviderName)
End If
Debug.WriteLine("---")
Catch ex As Exception
Debug.WriteLine(ex.Message)
End Try
End With
Next objDisk
End Sub
liefert mir
DeviceID: C:
Size: 268 GB
Free Disk Space: 195 GB
% Free: 72,60%
Drive Type: Local Disk
File System: NTFS
---
DeviceID: D:
Size: 215 GB
Free Disk Space: 150 GB
% Free: 69,74%
Drive Type: Local Disk
File System: NTFS
---
DeviceID: E:
Size: 94 GB
Free Disk Space: 20 GB
% Free: 21,89%
Drive Type: Local Disk
File System: NTFS
---
DeviceID: F:
Eine Ausnahme (erste Chance) des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.
Der Operator / ist für Typ DBNull und Typ Integer nicht definiert.
DeviceID: G:
Eine Ausnahme (erste Chance) des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.
Der Operator / ist für Typ DBNull und Typ Integer nicht definiert.
DeviceID: H:
Eine Ausnahme (erste Chance) des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.
Der Operator / ist für Typ DBNull und Typ Integer nicht definiert.
DeviceID: P:
Size: 42 GB
Free Disk Space: 6 GB
% Free: 15,06%
Drive Type: Local Disk
File System: NTFS
---
also quasi nichts - es fehlen noch immer die Netzlaufwerk K, L und S
hand, mogel
Passen vielleicht die Netzlaufwerke nicht?
Der Code
for (char c = 'A'; c <= 'Z'; c++)
{
DriveInfo di = new DriveInfo(c.ToString());
bool istNetzwerk = (di.DriveType == DriveType.Network);
Console.WriteLine("{0} {1}", c, istNetzwerk);
}
Console.ReadKey();
funktioniert tadelos und erkennt auch die Netzlaufwerke korrekt.
Lion
lg Lion
Hallo mogel,
das scheint aber dann speziell bei dir nur so zu sein, denn es gibt etliche Beispiele im Netz, bei denen auch die gemappten Netzwerklaufwerke angezeigt werden, s. z.B.
Read free space on network drives
How Can I Determine Which Drives are Mapped to Network Shares?
Network Drive Free Space
Und selbst die einfache DriveInfo-Schleife liefert bei mir (WinXP) auch die Netzwerk-Laufwerke.
P.S. herbivore, ich bin lernfähig -)
das scheint aber dann speziell bei dir nur so zu sein, denn es gibt etliche Beispiele im Netz, bei denen auch die gemappten Netzwerklaufwerke angezeigt werden, s.
anscheinend bin ich der einzige ... unter 1.1 uwsste ich das es nicht ging - hatte auch irgendwie im Kopf das die regel mit 2.0 wieder gestrichen wurde ... jedenfalls knallts
folgendes liefert mir eine DirdctoryNotFoundException - das Laufwerk ist aber da
Try
IO.Directory.CreateDirectory(IO.Path.Combine(drive, verzeichnis))
Catch ex As Exception
mylogger.err(ex)
End Try
Und selbst die einfache DriveInfo-Schleife liefert bei mir (WinXP) auch die Netzwerk-Laufwerke.
genau wegen XP versuche ich das Problem ja zu lösen ... selber habe ich Win7 64 ... das Programm "läuft" produktiv auf WinXP 32 - mit einem Netzlaufwerk ... beide Rechner finden die Netzlaufwerke nicht X(
Vielleicht passt das Ergebniss aus Combine nicht?
lg Lion
*hass*, mein Unmut über UAC wächst mit jedem Tag den ich den Blödsinn nutzen muss,
ich habe mir jetzt nochmal ein kleines Programm geschrieben - nur ausgabe der Laufwerke
wenn ich kein Manifest drinnen habe, super ... sowie ich Manifest einbaue (benötige diverse Rechte) funktioniert es nicht mehr ... keine Zugriffsrechte auf Netzlaufwerke
kann ich das Problem entsprechend via UAC lösen??
So,
es liegt wirklich nur an UAC ... das Problem ist via cmd.exe nachzuvollziehen ... wenn man es als Administrator ausführt sind auch da die Netzlaufwerke weg ... UAC kopiert die Netzlaufwerke nicht mit in die neue Session
leider funktioniert das nicht bei mir unter Win7
hand, mogel
Nachtrag: funktioniert doch - nur einfach Rechner neu starten