将系统中程序名称、发布者,安装时间,大小,版本都转化为XML文件
Windows 10 专业工作站版,Visual Studio2022 .NetFramework4.7.2
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.Windows.Forms;
namespace Xml_Project
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private List programList = new List();
public class ProgramInfo
{
public string Name { get; set; }
public string Version { get; set; }
public string Publisher { get; set; }
public long Size { get; set; }
public DateTime InstallDate { get; set; }
}
private void btnSaveToXml_Click(object sender, EventArgs e)
{
programList.Clear(); // 清空列表
var programs = GetInstalledPrograms();
foreach (var program in programs)
{
ProgramInfo info = new ProgramInfo();
info.Name = program["DisplayName"].ToString();
info.Publisher = program["Publisher"].ToString();
info.InstallDate = ManagementDateTimeConverter.ToDateTime(program["InstallDate"].ToString());
info.Size = Convert.ToInt64(program["EstimatedSize"]) / 1024 / 1024;
info.Version = program["DisplayVersion"].ToString();
programList.Add(info);
}
}
private List GetInstalledPrograms()
{
List programs = new List();
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32Reg_AddRemovePrograms");
foreach (ManagementObject program in searcher.Get())
{
programs.Add(program);
}
return programs;
}
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "XML文件|*.xml";
saveFileDialog.Title = "保存文件";
saveFileDialog.ShowDialog();
if (saveFileDialog.FileName != "")
{
using (FileStream fs = (FileStream)saveFileDialog.OpenFile())
{
XmlSerializer serializer = new XmlSerializer(typeof(List));
serializer.Serialize(fs, programList);
MessageBox.Show("保存成功!");
}
}
}
}
}
只要能实现这个功能就好
用 XmlDocument 来生成啊
直接建一个对象,然后对象转为xml就行了,跟java的差不多吧
using System.IO;
using System.Xml.Serialization;
public static string ObjectToXml(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
StringWriter writer = new StringWriter();
serializer.Serialize(writer, obj);
return writer.ToString();
}
你的代码中似乎缺少将XML文件保存到本地的代码,可以在 saveFileDialog1_FileOk
方法中实现。具体可以参考以下代码:
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "XML文件|*.xml";
saveFileDialog.Title = "保存文件";
saveFileDialog.ShowDialog();
if (saveFileDialog.FileName != "")
{
using (FileStream fs = (FileStream)saveFileDialog.OpenFile())
{
XmlSerializer serializer = new XmlSerializer(typeof(List<ProgramInfo>));
serializer.Serialize(fs, programList);
MessageBox.Show("保存成功!");
}
}
}
其中 saveFileDialog
是一个系统提供的用于选择保存文件路径的对话框,saveFileDialog.Filter
表示只允许保存 XML 文件,saveFileDialog.Title
表示在对话框中显示的标题。如果用户选择了保存路径,则可以使用 FileStream
将文件流打开,通过 XmlSerializer
将 programList
对象序列化到文件流中,最后弹出一个提示框表示保存成功即可。