清除所有ZipArchive条目

时间:2016-02-29 11:26:46

标签: c# win-universal-app

我在UWP c#中使用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();
    }
}

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

也有同样的问题。在我的情况下,用户使用FileSavePicker选择目标zip文件。 现在我通过在temp-folder

中创建一个临时ZIP文件来解决它
var tempZipFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("TempZipFile.zip", CreationCollisionOption.GenerateUniqueName);

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

await tempZipFile.MoveAndReplaceAsync(zipFileToCreate);

答案 2 :(得分:0)

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

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