我想动态生成一个xml文件并将其压缩成zip文件。
我需要使用XmlDocument和Ionic库(用于压缩)。
我可以理解ZipFile.AddEntry方法应该执行此任务,但由于某种原因,生成的xml文件在zip文件中包含空内容。如果不是将其发送到MemoryStream而是将其保存在磁盘上,我可以看到xml节点。
任何想法,我做错了什么?
MemoryStream memoryStream = new MemoryStream();
XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode = xmlDoc.CreateElement("users");
xmlDoc.AppendChild(rootNode);
XmlNode userNode = xmlDoc.CreateElement("user");
XmlAttribute attribute = xmlDoc.CreateAttribute("age");
attribute.Value = "42";
userNode.Attributes.Append(attribute);
userNode.InnerText = "John";
rootNode.AppendChild(userNode);
userNode = xmlDoc.CreateElement("user");
attribute = xmlDoc.CreateAttribute("age");
attribute.Value = "39";
userNode.Attributes.Append(attribute);
userNode.InnerText = "Jen";
rootNode.AppendChild(userNode);
//if (File.Exists(@"c:\temp\Teste\z.xml")) {
// File.Delete(@"c:\temp\Teste\z.xml");
//}
//xmlDoc.Save(@"c:\temp\Teste\z.xml"); -- it works
xmlDoc.Save(memoryStream);
if (File.Exists(@"c:\temp\Teste\z.zip")) {
File.Delete(@"c:\temp\Teste\z.zip");
}
using (ZipFile zip = new ZipFile(@"c:\temp\Teste\z.zip")) {
//zip.AddFile(@"C:\Temp\a.txt"); -- it works
zip.AddEntry("z.xml", memoryStream);
zip.Save();
}
感谢。