Проблема в том что выходит слишком много foreach, как всё это можно сократить?
private static string pcCPU;
private static string pcGPU;
private static string pcLocalIP;
private static string pcExternalIP;
private static string pcAntivirus;
string savePath = @"C:\Sys.txt";
using (FileStream file = new FileStream(savePath, FileMode.Append))
{
using (StreamWriter twf = new StreamWriter(file, Encoding.UTF8))
{
foreach (ManagementBaseObject avResult in avsearcher.Get())
{
pcAntivirus = "& " + (avResult.GetPropertyValue("displayName")).ToString();
pcAntivirus = (pcAntivirus.StartsWith("& ")) ?
pcAntivirus.Substring(1) :
pcAntivirus;
twf.WriteLine(" антивирус: " + pcAntivirus);
}
foreach (ManagementObject gr in gs.Get())
{
foreach (PropertyData pty in gr.Properties)
{
if (pty.Name == "Description")
{
pcGPU += pty.Value.ToString();
twf.WriteLine(" Видеоадаптер: " + pcGPU);
}
}
}
foreach (ManagementObject gob in sar.Get())
{
twf.WriteLine(" Модель компьютера: " + gob["Manufacturer"] + gob["Model"]);
}
}
}
P.S:
Я вот попробовал так сделать, но тут не получается:
1 - Выводит ошибку Invalid Class
2 - в twf нельзя записать WriteALLtext, можно только Write
StringBuilder sb = new StringBuilder();
foreach (ManagementBaseObject avResult in avsearcher.Get())
{
Sb.Append(" антивирус: ").Append(pcAntivirus).Append("
");
}
foreach (ManagementObject gr in gs.Get())
{
foreach (PropertyData pty in gr.Properties)
{
if (pty.Name == "Description")
{
Sb.Append(" Видеоадаптер: ").Append(pcGPU).Append(pty.Value.ToString()).Append("
");;
}
}
}
foreach (ManagementObject gob in sar.Get())
{
Sb.Append(" Модель компьютера: ").Append(gob["Manufacturer"]).Append(gob["Model"]).Append("
");;
}
twf.Write(sb.ToString());
А вот ошибка:
На просторах интернета нашёл интересный код: с использованием List
Информация о системе
Ответ
Например, вы можете отделить получение данных от их вывода.
// зачем вам странный трюк с "& "?
var avNames = avsearcher.Get()
.Cast
var graphicCardList = gs.Get()
.Cast
var computerInfoList = sar.Get()
.Cast
И теперь запись:
File.AppendAllLines(
savePath,
avNames.Select(s => $" Антивирус: {s}"),
Encoding.UTF8);
File.AppendAllLines(
savePath,
graphicCardList.Select(s => $" Видеоадаптер: {s}"),
Encoding.UTF8);
File.AppendAllLines(
savePath,
computerInfoList.Select(s => $" Модель компьютера: {s}"),
Encoding.UTF8);
Циклы не нужны вовсе.
Комментариев нет:
Отправить комментарий