繁体   English   中英

清除所有ZipArchive条目

[英]Clear all ZipArchive entries

我在UWP c#中使用ZipArchive类时遇到问题...当使用ZipArchive类将文件写入zip文件时,我注意到以下内容:如果您选择一个已经生成的文件(使用savefilepicker)以将其替换为新版本, ZipArchive添加新文件而不是替换文件...

为了解决这个问题,我尝试使用以下方法删除所有ZipArchiveEntries:

ZipArchiveEntry.Delete();

但是,如果我在使用foreach / for / enumerator.MoveNext()进行迭代时使用此方法,则循环会出现典型的“集合被修改,迭代可能无法继续”错误...

我的最新版本是:

using (var enumerator = _archive.Entries.GetEnumerator()) {
    while (enumerator.MoveNext()) {
        var item = enumerator.Current;
        item.Delete();
    }
}

我找到了解决问题的方法,但是如果这是最有效的方法,我不知道...

do {
    _archive.Entries[0].Delete();
} while (_archive.Entries.Count > 0);

也有同样的问题。 在我的情况下,用户使用FileSavePicker选择目标zip文件。 现在,我通过在临时文件夹中创建一个临时ZIP文件解决了该问题

var tempZipFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("TempZipFile.zip", CreationCollisionOption.GenerateUniqueName);

并且在将内容添加到zip文件时使用

await tempZipFile.MoveAndReplaceAsync(zipFileToCreate);

您还可以创建条目列表并将其删除

foreach(var entry = _archive.Entries.ToList()) {
    entry.Delete();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM