Veröffentlicht 14. Mai 200421 j 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
16. Mai 200421 j 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");
18. Mai 200421 j Autor 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
18. Mai 200421 j Hallo, ich habe ein Beispiel erstellt das 100%ig funktioniert, sorry beim ersten Beispiel habe ich paar Sachen vergessen : 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.
18. Mai 200421 j Autor 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
18. Mai 200421 j Hallo, kein Problem ich helfe gerne, wenn du willst, schicke ich dir ein Programm, da kannste die ganze WMI durchschauen. Und auch sehen welche Eigenschaften sie anbieten und welche Werte sie "live" haben. Ein Screenshot aus meinem "aktuellen" Programm: http://www.texturenland.de/images/pcinfo/pcinfo.png - die Werte werden alle über WMI ermittelt
19. Mai 200421 j Autor 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
19. Mai 200421 j 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.
1. Juni 200421 j Autor 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
1. Juni 200421 j 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.
1. Juni 200421 j Autor 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
1. Juni 200421 j 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.
3. Juni 200421 j 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
14. März 200817 j Autor 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...
14. März 200817 j Autor 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.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.