PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C#] Festplattengröße



DaZu
14.05.2010, 17:42
Tag auch,
ich würde gerne wissen wie ich in C# rausbekomme wie groß eine Festplatte ist.
Außerdem wieviel Speicher noch frei ist und wenn es geht auch noch eine auflistung der Platten/ Partionen.

Bei Google habe ich etwas Code gefunden, aber es ging überhaupt nicht.
Hier habe ich auch nichts gefunden.

l4nk4b3l
14.05.2010, 18:19
schau dir mal die DriveInfo klasse an

DriveInfo.GetDrives-Methode (System.IO) (http://msdn.microsoft.com/de-de/library/system.io.driveinfo.getdrives.aspx)

DaZu
14.05.2010, 21:11
danke werde ich morgen mal machen wenn ich die zeit dafür habe.

Atropos
14.05.2010, 22:14
Du verwendest einfach System.Management.
Musst vorher darauf verweisen ;)
Und hier den Code:


ManagementObject disc = new ManagementObject("win32_logicaldisk.deviceid=\"C:\"" );
disc.Get();
MessageBox.Show("Festplatten Größe = " + disc["Size"] + " bytes");
MessageBox.Show("Freierspeicher = " + disc["FreeSpace"] + "bytes");

//Edit:
Für Megabyte einfach durch 1024 ;)

Sawyer
14.05.2010, 22:41
Naja ich würde hier dennoch wie bereits von l4nk4b3l beschrieben die DriveInfo Klasse verwenden.

Hier eine schnell geschriebene Funktion:

private static long FestplattenGroesse(string LaufwerkBuchstabe)
{
System.IO.DriveInfo di = new System.IO.DriveInfo(LaufwerkBuchstabe);
{
return (((di.TotalSize / 1024) / 1024) / 1024);
}
}Beispiel für den Aufruf:

Console.WriteLine("Die größe der Festplatte \"{0}\" beträgt: {1}", "C:\\", FestplattenGroesse("C:\\"));
Console.Read();Ausgabe:

Die größe der Festplatte "C:\" beträgt: 228 GBMfG, Sawyer

DaZu
15.05.2010, 15:15
Hey,
danke euch das hat mir sehr geholfen, nun versuche ich es aber mit Array etwas aufzuarbeiten, da ich mehrere Sachen abfragen will, aber ich komm nicht weiter.


private string[] myDisc(string Buchstabe)
{
string[] myDisc = new string[3];
System.IO.DriveInfo di = new System.IO.DriveInfo(Buchstabe);
{
myDisc[0] = (((di.TotalSize / 1024) / 1024) / 1024).ToString();
}
return myDisc;
}


public Cleaner()
{
InitializeComponent();
lblSpeicher.Text = "Die größe der Festplatte beträgt: " + myDisc[0]("C:\\") + " GB";
}
Würde mich über hilfe freuen.

Atropos
15.05.2010, 15:23
Ich versteh dein Problem nicht.
Wenn du mehrere Sachen im Array Speichern willst (und somit zurückgeben) erhöhe doch einfach den Index und speichere dort den nächsten Datensatz usw.
//Edit:
Das myDisc[0]("C:\\") schaut nicht gut aus.
Wenn das nicht funktioniert mach es am besten so:


string[] disc = myDisc("C:\\");
lblSpeicher.Text = "Die größe der Festplatte beträgt: " + disc[0]("C:\\") + " GB";

DaZu
16.05.2010, 11:56
Danke, zwar hast du wohl nicht verstanden, was genau ich meine, aber du hast genau das Bearbeitet, was ich meinte.

Hier die Lösung:

private string[] myDisc(string Buchstabe)
{
string[] myDisc = new string[5];
System.IO.DriveInfo di = new System.IO.DriveInfo(Buchstabe);
{
myDisc[0] = di.IsReady.ToString();
if (di.IsReady == true)
{
myDisc[1] = di.DriveType.ToString();
myDisc[2] = di.DriveFormat.ToString();
myDisc[3] = (((di.TotalSize / 1024) / 1024) / 1024).ToString();
myDisc[4] = (((di.AvailableFreeSpace / 1024) / 1024) / 1024).ToString();
}
}
return myDisc;
}


public Cleaner()
{
InitializeComponent();
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
string[] disc = myDisc(d.Name);
if (d.DriveType.ToString() == "Fixed")
{
lsbAusgabe.Items.Add("Festplatte: " + d.Name);
lsbAusgabe.Items.Add("Die größe der Festplatte beträgt: " + disc[3] + " GB");
lsbAusgabe.Items.Add("Der freie Speicher beträgt: " + disc[4] + " GB");
lsbAusgabe.Items.Add("-------------------------------------------------");
}
}
}

Nicht wundern, ich könnte das natürlich einfacher ohne Methode machen, aber wollte es einfach mal testen mit den Arrays.

Sorry für den Doppelpost, aber habe wieder ein Problem

Ich habe hier ein ListView und will z.b. in einem Label wiedergeben welches der User Markiert hat.

Hier mein Code:

private string[] myDisc(string Buchstabe)
{
string[] myDisc = new string[5];
System.IO.DriveInfo di = new System.IO.DriveInfo(Buchstabe);
{
myDisc[0] = di.IsReady.ToString();
if (di.IsReady == true)
{
myDisc[1] = di.DriveType.ToString();
myDisc[2] = di.DriveFormat.ToString();
myDisc[3] = ((di.TotalSize / 1024) / 1024).ToString();
myDisc[4] = ((di.AvailableFreeSpace / 1024) / 1024).ToString();
}
}
return myDisc;
}

[DllImport("uxtheme.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
private static extern int SetWindowTheme(IntPtr hWnd, string appName, string partList);


public Cleaner()
{
InitializeComponent();

ListViewItem myItem;

// Create columns for the items and subitems.
// Set the view to show details.
Tabelle.View = View.Details;
// Allow the user to edit item text.
Tabelle.LabelEdit = false;
// Allow the user to rearrange columns.
Tabelle.AllowColumnReorder = true;
// Display check boxes.
Tabelle.CheckBoxes = false;
// Select the item and subitems when selection is made.
Tabelle.FullRowSelect = true;
// Display grid lines.
Tabelle.GridLines = false;

SetWindowTheme(this.Tabelle.Handle, "explorer", null);

Tabelle.Columns.Add("", 72, HorizontalAlignment.Center);
Tabelle.Columns.Add("Partition", 60, HorizontalAlignment.Center);
Tabelle.Columns.Add("Speicher", 80, HorizontalAlignment.Right);
Tabelle.Columns.Add("Frei", 80, HorizontalAlignment.Right);

DriveInfo[] allDrives = DriveInfo.GetDrives();

foreach (DriveInfo d in allDrives)
{

string[] disc = myDisc(d.Name);
if (d.DriveType.ToString() == "Fixed")
{
myItem = new ListViewItem(d.Name, "1273959727_HP-HDD-Dock-512.png");
myItem.SubItems.Add(d.Name);
myItem.SubItems.Add(disc[3] + " MB");
myItem.SubItems.Add(disc[4] + " MB");
Tabelle.Items.Add(myItem);
}


}
}