webForumDet fria alternativet

Listviews problem

.NET

5 svar · 259 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Svaren på mina frågor har kanske varit lite tunsådda, men jag försöker en gång till.

När man använder sig av Directory.GetLogicalDrives, hur kan man skillja på vilken typ det är(floppy,hårddisk, cdrom ect?

string []hårddiskar = Directory.GetLogicalDrives();
			foreach (string hårddisk in hårddiskar)
			{
				listBox1.Items.Add(hårddisk);				
			}

Hur får jag fram detta? jag detta?

Medlem sedan maj 20012 812 inlägg
#2

Vad jag har förstått så är det lite tunsått :) med egenskaper för filer i .NET. Jag antar att det inte går eftersom det returneras en array av strängar och inte en array av objekt.

Min gissning blir att du får använda dig av gammla hederliga Win32 API för att få ut den informationen, tyvärr vet jag inte hur, men det kan man säkert söka upp på nätet :-)

- M

Medlem sedan dec. 19991 072 inlägg
Medlem sedan mars 20011 880 inlägg
#4

Det såg ju kanon ut, men det var ju för VB.net.
Hur översätter man detta till C#?

Imports System
Imports System.Management
' Disktypes - NoRoot = 1; Removable = 2; LocalDisk = 3; Network = 4; CD = 5; RAMDrive = 6;
Public Class Wmis

Public Shared Sub Main()
Dim disks As New ManagementClass("Win32_LogicalDisk")
Dim moc As ManagementObjectCollection = disks.GetInstances()
Dim mo As ManagementObject
For Each mo In moc
Console.WriteLine("Disk type : {0}", mo("DriveType").ToString())
Next mo
disks.Dispose()
End Sub 'Main
End Class

Imports System.Management fillns ju inte i C#

Medlem sedan juli 20011 304 inlägg
#5

Trixade ihop ett litet utökat konverterat program åt dig :)
För att komma åt System.Management måste du lägga till en referens till just System.Management i ditt projekt.
i visual studio.net gör fu det genom att högerklicka på references i solution explorer och välja add reference.

using System;
using System.Management;

namespace ConsoleApplication1
{
	class Class1
	{

		[STAThread]
		static void Main(string[] args)
		{
			ManagementClass disks = new ManagementClass("Win32_LogicalDisk");
			ManagementObjectCollection moc = disks.GetInstances();
			
			foreach(ManagementObject mo in moc)
			{
				int drivetype = Int16.Parse(mo.GetPropertyValue("DriveType").ToString());

				Console.WriteLine("-----------------------------------");
				Console.WriteLine("Name : " + mo.GetPropertyValue("Name").ToString());
				Console.WriteLine("Disk type : {0}", GetDT(drivetype));
				if(mo.GetPropertyValue("FreeSpace") != null)
					Console.WriteLine("FreeSpace: " + mo.GetPropertyValue("FreeSpace").ToString());
				if(mo.GetPropertyValue("Size") != null)
					Console.WriteLine("Size: " + mo.GetPropertyValue("Size").ToString());
				Console.WriteLine("-----------------------------------");
				Console.WriteLine("");

			}

			disks.Dispose();
			Console.ReadLine();
		}

		static string GetDT(int type)
		{
			switch(type)
			{
				case 1:
					return "NoRoot";
				case 2:
					return "Removable";
				case 3:
					return "LocalDisk";
				case 4:
					return "Network";
				case 5:
					return "CD";
				case 6:
					return "RamDrive";
				default:
					return "Mr boombastic har ingen aning....";

			}
		}
	}
}
Medlem sedan mars 20011 880 inlägg
#6

Tack, jag skall kolla upp detta hur jag kan få det att fungera.

307 ms totalt · 3 externa anrop · v20260731065814-full.265f3fdd
163 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)