Zum Inhalt springen

C# : freien Festplattenspeicher ermitteln


Empfohlene Beiträge

Geschrieben

Hallo zusammen,

weiss jemand, wie ich in C# den freien Festplattenspeicher ermitteln kann? Oder die Größe eines Verzeichnisses? Will ein Verzeichnis kopieren und will halt vorher prüfen, ob noch genug Platz auf der Festplatte ist. Hat da vielleicht jemand einen Lösungsansatz?

Mr. Tommes

Geschrieben

Ich habs nicht getestet, aber so dürfte es gehen:

using System;

using System.Management;

...

ManagementObject disc = new ManagementObject("win32_logicaldisk.deviceid="C:"");

disc.Get();

Console.WriteLine("Festplatten Größe = " + disc["Size"] + " bytes");

Console.WriteLine("Freierspeicher = " + disc["FreeSpace"] + "bytes");

Geschrieben

Hallo,

erstmal Danke für die Antwort. Sieht gut aus und könnte klappen. Hab es eben mal ausprobiert. Der Compiler meckert bei:

ManagementObject disc = new ManagementObject("win32_logicaldisk.deviceid="C:"");

Mir ist nicht ganz klar, was in die Klammer muss. Da kann man auch nur einen path angeben, also einen Pfad zu einem WMI Objekt. Da liegt mein Problem. Hab noch nicht ganz rausgefunden was da von mir verlangt wird.

Hoffe auf weitere Hilfe...

Mr. Tommes

Geschrieben

Hallo, ich habe ein Beispiel erstellt das 100%ig funktioniert, sorry beim ersten Beispiel habe ich paar Sachen vergessen :rolleyes: :


using System;

using System.Management;


....


ManagementObjectSearcher query;

ManagementObjectCollection queryCollection;

System.Management.ObjectQuery oq;

string stringMachineName = "localhost";


//Connect to the remote computer

ConnectionOptions co = new ConnectionOptions();


//Point to machine

System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\" + stringMachineName + "\\root\\cimv2", co);


oq = new System.Management.ObjectQuery("SELECT * FROM Win32_LogicalDisk WHERE DeviceID = 'C:'");

query = new ManagementObjectSearcher(ms,oq);

queryCollection = query.Get();

foreach ( ManagementObject mo in queryCollection)

{

Console.Writeline(mo["FreeSpace"].ToString());

}

Wenn du Probleme hast, einfach melden.

Geschrieben

Hey,

vielen Dank !!!!!!!!!

Hat wunderbar geklappt. Jetzt muss ich mir das nur nochmal genauer zu Gemüte führen, um auch zu verstehen, was da gemacht wird. Aber das dürfte schon klappen. Nochmals vielen Dank !!

Mr. Tommes

Geschrieben

Hi, ja klar. Kannst du gerne mal schicken. Habe noch eine kleine Frage. Wie finde ich heraus, was alles abgefragt werden kann? "... Console.Writeline(mo["FreeSpace"].ToString()); ..." Hier wird der FreeSpace abgefragt? Wie kann ich ermitteln, was es noch zum abfragen gibt? Natürlich könnte ich die einzelnen Indexe durchtesten, aber wie krieg ich deren Bezeichnung raus?

Möchte nämlich jetzt noch die Grösse eines Verzeichnisses ermitteln.

Gruss Mr. Tommes

Geschrieben

Jetzt müsste ich nur noch wissen wie dein Emailadresse lautet, damit ich dir das Programm schicken kann. "Wie kann ich ermitteln, was es noch zum abfragen gibt?" Das kannst du alles mit diesem Tool machen was ich dir schicken werde.

  • 2 Wochen später...
Geschrieben

Hallo Counterfeit,

sorry, dass ich jetzt erst antworte. War im Urlaub. Habe mir dein Programm mal angeguckt. Hilft mir aber nicht weiter. Sehe lediglich die Namespaces und die dazugehörigen Klassen. Die Properties die erscheinen sollen, also die "Class Details" sind immer leer. Ist das Absicht?

Gruss Mr. Tommes

Geschrieben

ManagementObject disc = new ManagementObject("win32_logicaldisk.deviceid="C:"");

Also, wenn ich der Compiler wäre, dann würd ich mich dabei auch beschweren.

Wenn das C: da in Anführungszeichen soll dann bitte schön in Escape-Zeichen \"C:\", sonst geht es so nicht.

Geschrieben

Hallo,

stimmt, aber das wurde bereits im neuen Quellcode korrigiert.

Würde dennoch gerne wissen, wie ich jetzt die Größe eines Verzeichnisses ermitteln kann? Also diesmal den belegten Speicher.

Mr. Tommes

Geschrieben

Mhh gute Frage, jetzt wo ich vor paar Tagen formatiert habe, ist es bei mir auch leer, aber ich werde mich mal schlau machen, ich habe es ja auch ihrgendwie hingekriegt ;)

@MasterC

Also, wenn ich der Compiler wäre, dann würd ich mich dabei auch beschweren.

Wenn das C: da in Anführungszeichen soll dann bitte schön in Escape-Zeichen \"C:\", sonst geht es so nicht.

Ich habe den Code einfach so ohne zu prüfen geschrieben, deswegen habe ich nicht drauf geachtet. Im neuen Code wurde das verbessert und getestet.

Geschrieben

Hallo,

da das Tool ihrgendwie nicht mehr geht hab ich das coole "Plugin" für Visual Studio gefunden, das wird links unter Server reingestellt und dort kannst du die Werte auch auslesen ist sogar besser :) Da die deutsche erklärung zu allem dabei steht.

Download

  • 3 Jahre später...
Geschrieben

Hab jetzt was gefunden, so nach 6 Jahren erfolgloser Suche ;)

Quelle: Directory-Klasse (System.IO)

C# Code kopieren

// The following example calculates the size of a directory

// and its subdirectories, if any, and displays the total size

// in bytes.

using System;

using System.IO;

public class ShowDirSize

{

public static long DirSize(DirectoryInfo d)

{

long Size = 0;

// Add file sizes.

FileInfo[] fis = d.GetFiles();

foreach (FileInfo fi in fis)

{

Size += fi.Length;

}

// Add subdirectory sizes.

DirectoryInfo[] dis = d.GetDirectories();

foreach (DirectoryInfo di in dis)

{

Size += DirSize(di);

}

return(Size);

}

public static void Main(string[] args)

{

if (args.Length != 1)

{

Console.WriteLine("You must provide a directory argument at the command line.");

}

else

{

DirectoryInfo d = new DirectoryInfo(args[0]);

Console.WriteLine("The size of {0} and its subdirectories is {1} bytes.", d, DirSize(d));

}

}

}

Vielleicht hilft es ja auch anderen, die dieses Problem haben.

Bis in 6 Jahren dann... :D

Geschrieben

Hier nochmal die Antwort zum ursprünglichen Problem:

1. Ermittlung des freien Festplattenspeichers

2. Ermittlung der Größe des zu kopierenden Ordners

Benötigt wird "using System.IO;".

Freier Festplattenspeicher wird folgendermaßen ermittelt:

System.IO.DriveInfo freeSpace = new System.IO.DriveInfo("C");

long space = freeSpace.AvailableFreeSpace;

Größe des Ordners sowie dessen Unterordner:

System.IO.DirectoryInfo d = new System.IO.DirectoryInfo("C:\Programme");

long size = DirSize(d);

Hier erfolgte grade der Aufruf für die Methode, die die Größe ermittelt:

public static long DirSize(DirectoryInfo d)

{

long Size = 0;

// Add file sizes.

FileInfo[] fis = d.GetFiles();

foreach (FileInfo fi in fis)

{

Size += fi.Length;

}

// Add subdirectory sizes.

DirectoryInfo[] dis = d.GetDirectories();

foreach (DirectoryInfo di in dis)

{

Size += DirSize(di);

}

return (Size);

}

So, das ist jetzt eine schöne und schnelle Lösung zur Ermittlung des freien Festplattenspeicherplatzes und zur Ermittlung der Größe eines Ordners mit seinen Unterordnern.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...