# [C#] Festplatten auflisten



## Saber (6. Februar 2003)

Hallo zusammen!!!

Ich bräuchte den Quelltext dazu, wie man *NUR* die Festplatte mit C# ausliest, also keine Floppys, CD-ROMs etc.
Ich brauche das ganze für eine Explorer-ähnliche TreeView, allerdings will ich da nur die Festplatten drinnen haben.

Das eigentliche Problem ist folgendes. Ich hab zwar einen Quelltext, der mir das macht. Allerdings benutze ich einen Aufruf von *win32_logicaldisk*. Danach kann ich die Festplatten filtern. Jedoch scannt diese Funktion ALLE Laufwerke. Das hat die unangenehme Nebenwirkung, dass das 3,5" Laufwerk zu rattern beginnt. Und genau das will ich vermeiden.

Nun, beim Aufruf den Windows Explorers werden auch alle Laufwerke angezeigt, aber da rattert das Floppy nicht. Also muss es gehen.

Meine Frage an Euch: WIE BEKOMME ICH ALLE FESTPLATTEN, OHNE DASS DAS FLOPPY ZU RATTERN BEGINNT???

Vielen Dank im Vorraus!!! 

MfG
Mike


----------



## arrayhunter (8. Februar 2003)

eine Möglichkeit wäre es, mit GetDriveType 
zu  überprüfen, ob ein Disk-LW oder CDR vorliegt und dass lässt du dann beim Einlesen aus


----------



## Janares (10. März 2003)

würd mich mal interessieren wie der quellcode aussieht kannst das mal posten??


----------



## Saber (10. März 2003)

Meinst Du mich oder ArrayHunter?


----------



## Janares (10. März 2003)

dich


----------



## Saber (10. März 2003)

Okay, der Code war in der ganzen Klasse verstreut, aber ich denke im großen und ganzen sollte ich alles zu erwischen. Wenn was fehlen sollte, dann postet einfach noch einmal. 


```
// Laufwerke und Laufwerkstypen abfragen
ManagementScope scope = new ManagementScope (ManagementPath.DefaultPath);
SelectQuery wql = new SelectQuery("Win32_LogicalDisk");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, wql);
			
// Nodes eintragen
foreach(ManagementObject item in searcher.Get())
{
   // Laufwerkstyp selektieren
   if (item["DriveType"].ToString() == "5")
   {
	// CD-/DVD-ROM/Brenner
	node = new TreeNode(item["DeviceID"].ToString() + "\\", 4, 4);
   }
   else if (item["DriveType"].ToString() == "2")
   {
	// Diskette
	node = new TreeNode(item["DeviceID"].ToString() + "\\", 3, 3);
   }
   else
   {
	// Sonstiges
	node = new TreeNode(item["DeviceID"].ToString() + "\\", 0, 0);
   }
   
   Nodes.Add(node);

   // Verzeichnisstruktur aufbauen
   
   if (item["DriveType"].ToString() != "5" &&
   item["DriveType"].ToString() != "2")
   {
      Fill_Directories(node);
   }

   // Festplatte selektieren
   if (item["DeviceID"].ToString() + "\\" == "C:\\")
   {
      SelectedNode = node;
   }
}
```


----------



## Janares (10. März 2003)

hm ich versteh nicht ganz wie ich das in mein prog einbauen kann muss ich noch irgendwas #inlcude mässiges dazu machen?


----------



## Saber (10. März 2003)

Es gibt in C# keinen #include-Befehl, sondern nur den using-Befehl. Dein Befehl stammt aus C/C++.


----------



## Janares (10. März 2003)

ach so gibts dann ne möglichkeit das bei mir einzubauen?


----------



## Saber (10. März 2003)

Hmm, in C++ bin ich nicht so bewandet, das kann ich Dir nicht sagen, aber such doch mal in Google.de nach C++ und Win32_LogicalDisk. 

*sorry*


----------



## Janares (10. März 2003)

kann da nix finden aber trotzdem danke für die Hilfe


----------



## Draken (3. März 2005)

So geht es besser:


using System.Management;

ManagementScope scope = new ManagementScope (ManagementPath.DefaultPath);
SelectQuery wql = new SelectQuery("select * from Win32_LogicalDisk where DeviceType = 3");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, wql);

foreach(ManagementObject item in searcher.Get())
{
//was auch immer du damit tun willst...
}


----------



## Tobias K. (3. März 2005)

moin


Warum stellst du diese C# frage nciht im C# Bereich?


mfg
umbrasaxum


----------



## lordfritte (1. Januar 2008)

Kann man auch den Namen, die Größe und den freien Speicher der Laufwerke anzeigen lassen?


----------

