Ema*_*rsa 5 c# xmldocument edit ziparchive
我正在尝试编辑XmlDocumentZip文件中包含的文件:
var zip = new ZipArchive(myZipFileInMemoryStream, ZipArchiveMode.Update);
var entry = zip.GetEntry("filenameToEdit");
using (var st = entry.Open())
{
var xml = new XmlDocument();
xml.Load(st);
foreach (XmlElement el in xml.GetElementsByTagName("Relationship"))
{
if(el.HasAttribute("Target") && el.GetAttribute("Target").Contains(".dat")){
el.SetAttribute("Target", path);
}
}
xml.Save(st);
}
Run Code Online (Sandbox Code Playgroud)
执行此代码后,所包含的文件不会更改.如果不是xml.Save(st);我把xml写入磁盘,我得到了编辑过的.
为什么编辑后的文件没有写入zip?我如何解决它?
编辑:
我更新了代码:
var tmp = new MemoryStream();
using (var zip = new ZipArchive(template, ZipArchiveMode.Read, true))
{
var entry = zip.GetEntry("xml");
using (var st = entry.Open())
{
var xml = new XmlDocument();
xml.Load(st);
foreach (XmlElement el in xml.GetElementsByTagName("Relationship"))
{
if (el.HasAttribute("Target") && el.GetAttribute("Target").Contains(".dat"))
{
el.SetAttribute("Target", path);
}
}
xml.Save(tmp);
}
}
using (var zip = new ZipArchive(template, ZipArchiveMode.Update, true))
{
var entry = zip.GetEntry("xml");
using (var st = entry.Open())
{
tmp.Position = 0;
tmp.CopyTo(st);
}
}
Run Code Online (Sandbox Code Playgroud)
以这种方式编辑zip文件,但只有当流的长度相等时它才有效.如果tmp更短,其余部分st仍在文件中......
提示?
Rob*_*sig -1
我使用此代码创建一个 Zip InMemory(使用 DotNetZip 库):
MemoryStream saveStream = new MemoryStream();
ZipFile arrangeZipFile = new ZipFile();
arrangeZipFile.AddEntry("test.xml", "content...");
arrangeZipFile.Save(saveStream);
saveStream.Seek(0, SeekOrigin.Begin);
saveStream.Flush(); // might be useless, because it's in memory...
Run Code Online (Sandbox Code Playgroud)
之后我在 MemoryStream 中就有了一个有效的 Zip。我不知道为什么我添加了 Flush() - 我猜这是多余的。
要编辑现有的 Zip,您可以在 MemoryStream 中读取它,而不是使用“new ZipFile(byteArray...)”创建“new ZipFile()”。
| 归档时间: |
|
| 查看次数: |
1456 次 |
| 最近记录: |