Можно ли в данном случае сделать лаконичней ? Сбор данных 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);
}