Mr. Tommes Geschrieben 14. Mai 2004 Geschrieben 14. Mai 2004 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 Zitieren
Counterfeit Geschrieben 16. Mai 2004 Geschrieben 16. Mai 2004 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"); Zitieren
Mr. Tommes Geschrieben 18. Mai 2004 Autor Geschrieben 18. Mai 2004 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 Zitieren
Counterfeit Geschrieben 18. Mai 2004 Geschrieben 18. Mai 2004 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. Zitieren
Mr. Tommes Geschrieben 18. Mai 2004 Autor Geschrieben 18. Mai 2004 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 Zitieren
Counterfeit Geschrieben 18. Mai 2004 Geschrieben 18. Mai 2004 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 Zitieren
Mr. Tommes Geschrieben 19. Mai 2004 Autor Geschrieben 19. Mai 2004 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 Zitieren
Counterfeit Geschrieben 19. Mai 2004 Geschrieben 19. Mai 2004 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. Zitieren
Mr. Tommes Geschrieben 19. Mai 2004 Autor Geschrieben 19. Mai 2004 hups, ja stimmt... hier die eMail-Adresse: t.weinmann@gevasys.de Zitieren
Mr. Tommes Geschrieben 1. Juni 2004 Autor Geschrieben 1. Juni 2004 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 Zitieren
MasterC Geschrieben 1. Juni 2004 Geschrieben 1. Juni 2004 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. Zitieren
Mr. Tommes Geschrieben 1. Juni 2004 Autor Geschrieben 1. Juni 2004 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 Zitieren
Counterfeit Geschrieben 1. Juni 2004 Geschrieben 1. Juni 2004 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. Zitieren
Counterfeit Geschrieben 3. Juni 2004 Geschrieben 3. Juni 2004 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 Zitieren
Mr. Tommes Geschrieben 14. März 2008 Autor Geschrieben 14. März 2008 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... Zitieren
Mr. Tommes Geschrieben 14. März 2008 Autor Geschrieben 14. März 2008 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. Zitieren
Empfohlene Beiträge
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.