14. juli 2005 - 09:38Der er
7 kommentarer og 1 løsning
Finde ud af hvilke drev der er i en computer c:\ d:\ mm.
Hej Kan i hjælpe mig med hvordan jeg kan finde ud af hvilke drev der er i en computer fx. c:\ d:\ osv. i en win application. Jeg har kigget på File.Exists() men kan ikke fådet til at virke på drev. Det store tillægs spørgsmål kommer så: hvordan er jeg sikker på at det kun er drev på den lokale hd og ikke CD drev, netværksdrev...
Der er en klasse i .NET 2.0 til det: System.IO.DriveInfo
For .NET 1.1 må du bruge noget Win32 API:
using System; using System.Text; using System.Runtime.InteropServices;
public class MainClass { [DllImport("kernel32.dll")] public static extern int GetDriveType(string driveLetter); [DllImport("kernel32.dll")] public static extern int GetVolumeInformation(string strPathName, StringBuilder strVolumeNameBuffer, int lngVolumeNameSize, int lngVolumeSerialNumber, int lngMaximumComponentLength, int lngFileSystemFlags, StringBuilder strFileSystemNameBuffer, int lngFileSystemNameSize);
public static string GetDiskType(string drive) { switch(GetDriveType(drive)) { case 2: return "floppy"; case 3: return "harddisk"; case 4: return "networkdrive"; case 5: return "CD"; default: return "unknown"; } } public static string GetDiskLabel(string drive) { StringBuilder volnam = new StringBuilder(256); StringBuilder fsnam = new StringBuilder(256); int serial = 0; int maxfnlen = 0; int flags = 0; GetVolumeInformation(drive + "\\", volnam, 256, serial, maxfnlen, flags, fsnam, 256); return volnam.ToString(); } public static void test(string drive) { Console.WriteLine(drive + " " + GetDiskType(drive) + " " + GetDiskLabel(drive)); } public static void Main(string[] args) { test("A:"); test("C:"); test("D:"); test("E:"); test("F:"); } }
Arne, har du også en ide til hvordan jeg kan finde ud af hvilke drev en anden pc har over netværker med denne kode, hvis jeg har en administrativ bruger som har adgang til denne pc? selv om mit lille program ligger lokalt på min PC.
jeg har fået en stump VB kode der kan gøre det, men jeg skal gerne have det til at virke i C#. Enten at kalde dette script med et parameter og kunne tage imod den strend det retunerer eller få det skrevet om til C#. Er det noget du kan hjælpe med? du skal nok få nogle flere points for det!
VB: args = WScript.Arguments.Count if args = 0 then pc="localhost" else pc=wscript.arguments.item(0) end if
On Error Resume Next Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & pc & "\root\cimv2") Set colDisks = objWMIService.ExecQuery _ ("Select * from Win32_LogicalDisk") For each objDisk in colDisks if objDisk.Description = "Local Fixed Disk" Then drev=drev+objDisk.DeviceID+";" end if Next wscript.echo drev
Jeg fandt lige dette her jeg kan køre det lille script med :-) så nu skal jeg bare trimme lidt så det er snildt
using System.Diagnostics
ProcessStartInfo info = new ProcessStartInfo("cscript", "enum_logical_drives.vbs PCNavn"); info.UseShellExecute = false; info.RedirectStandardOutput = true; Process proc = new Process(); proc.StartInfo = info; proc.Start(); string output = proc.StandardOutput.ReadToEnd(); proc.WaitForExit(); System.Windows.Forms.MessageBox.Show(output);
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.