Можно ли в данном случае сделать лаконичней ? Сбор данных WMI - C#
Формулировка задачи:
Приходится собирать данные о машине. Я использую WMI.
Приходится выводить их на консоль. И также в файл.
Вопрос, можно ли сделать (на примере) лаконичней код сбора данных с WMI ?
результат (файл и консоль)
== Информация о дисках (через WMI):============
-----------------------------------------------
DriveLetter:
Capacity:104853504
Caption: \\?\Volume{08903a46-73a5-11e2-9df0-806e6g6e6963}\
DriveType: 3
FileSystem: NTFS
FreeSpace: 72781824
----------------------------------------
DriveLetter:
Capacity:
Caption: \\?\Volume{ad715e1f-7380-11e2-a0b8-001d60e4cce6}\
DriveType: 3
FileSystem:
FreeSpace:
----------------------------------------
DriveLetter:
Capacity:
Caption: \\?\Volume{266a54f7-7396-13e2-a7cf-001d60e7cce5}\
DriveType: 3
FileSystem:
FreeSpace:
----------------------------------------
DriveLetter: C:
Capacity:161341239296
Caption: C:\
DriveType: 3
FileSystem: NTFS
FreeSpace: 65455742976
----------------------------------------
DriveLetter: D:
Capacity:838754627584
Caption: D:\
DriveType: 3
FileSystem: NTFS
FreeSpace: 117283680256
----------------------------------------
DriveLetter: F:
Capacity:1000201777152
Caption: F:\
DriveType: 3
FileSystem: NTFS
FreeSpace: 419504353280
----------------------------------------
DriveLetter: E:
Capacity:
Caption: E:\
DriveType: 5
FileSystem:
FreeSpace:
----------------------------------------
DriveLetter: H:
Capacity:
Caption: H:\
DriveType: 5
FileSystem:
FreeSpace:
----------------------------------------
--Конец блока информации о дисках (через WMI)---
// информация о дисках (технология windows WMI) public static void GetDiskInfo() { ManagementObjectSearcher srch1 = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Volume"); String[] st = new string[500]; //тупо с запасом. Понимаю что тупо. Прикрутить динамику ? int i = 0; st[i] = "== Информация о дисках (через WMI):============"; i++; st[i] = "-----------------------------------------------"; i++; foreach (ManagementObject kolsQ in srch1.Get()) { i++; st[i] = "DriveLetter: " + kolsQ["DriveLetter"]; i++; st[i] = "Capacity:" + kolsQ["Capacity"]; i++; st[i] = "Caption: " + kolsQ["Caption"]; i++; st[i] = "DriveType: " + kolsQ["DriveType"]; i++; st[i] = "FileSystem: " + kolsQ["FileSystem"]; i++; st[i] = "FreeSpace: " + kolsQ["FreeSpace"]; i++; st[i] = "----------------------------------------"; } i++; st[i] = "--Конец блока информации о дисках (через WMI)---"; for (int d = 0; d < i + 1; d++) { Console.WriteLine(st[d]); ToFile(st[d]); } } //запись строк в текстовый файл,добавлением. static void ToFile(String strToFile) { //Здесь using,для того что бы после операции объект sw был удален using (StreamWriter sw = File.AppendText(@"c:\Цех84_тех_отдел2_ПК_инвN9341_СелёдкинЕВ_log.txt")) { sw.WriteLine(strToFile); } }
Решение задачи: «Можно ли в данном случае сделать лаконичней ? Сбор данных WMI»
textual
Листинг программы
List<string> dv = new List<string>(); dv.Add("== Информация о дисках (через WMI):============"); dv.Add("-----------------------------------------------"); foreach (ManagementObject kolsQ in srch1.Get()) { dv.Add("DriveLetter: " + kolsQj["DriveLetter"]); dv.Add("Capacity:" + kolsQ["Capacity"]); dv.Add("Caption: " + kolsQ["Caption"]); dv.Add("DriveType: " + kolsQ["DriveType"]); dv.Add("FileSystem: " + kolsQ["FileSystem"]); dv.Add("FreeSpace: " + kolsQ["FreeSpace"]); dv.Add("-----------------------------------------------"); } foreach (string g in dv) { Console.WriteLine(g); ToFile(g); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д