Windows 8 ZipArchive不适用于通用应用程序(Windows 8.1和Windows Phone 8.1)
嗨,我的通用应用程序的ZipArchive出现了这个问题。下面的代码适用于Windows Phone,但不适用于Windows 8.1应用程序 我不明白为什么这不适用于Windows 8.1应用程序,而只适用于Windows Phone 我得到的例外是:中央目录末尾预期的条目数与中央目录中的条目数不对应。当我试着读这些条目时Windows 8 ZipArchive不适用于通用应用程序(Windows 8.1和Windows Phone 8.1),windows-8,windows-runtime,windows-8.1,windows-phone-8.1,win-universal-app,Windows 8,Windows Runtime,Windows 8.1,Windows Phone 8.1,Win Universal App,嗨,我的通用应用程序的ZipArchive出现了这个问题。下面的代码适用于Windows Phone,但不适用于Windows 8.1应用程序 我不明白为什么这不适用于Windows 8.1应用程序,而只适用于Windows Phone 我得到的例外是:中央目录末尾预期的条目数与中央目录中的条目数不对应。当我试着读这些条目时 using (var zipStream = await folder.OpenStreamForReadAsync(filename))
using (var zipStream = await folder.OpenStreamForReadAsync(filename))
{
using (MemoryStream zipMemoryStream = new MemoryStream((int)zipStream.Length))
{
await zipStream.CopyToAsync(zipMemoryStream);
using (var archive = new ZipArchive(zipMemoryStream, ZipArchiveMode.Read))
{
try
{
// THIS CAUSE THE EXCEPTION!!!!
foreach (var entry in archive.Entries)
{
if (entry.Name == "")
{
// Folder
await CreateRecursiveFolder(folder, entry);
}
else
{
// File
await ExtractFile(folder, entry);
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
//throw;
}
}
}
您确定foreach循环导致异常吗?我会说它在CreateRecursiveFolder或ÈxtractFile方法中的某个地方,由于这些方法是异步的,所以会出现异常!我认为这是Windows8.1框架中的一个缺陷。当它作为Windows Phone应用程序运行时,相同的文件也可以工作!我无法解释为什么这在手机上有效而在RT上无效。但您是否尝试添加zipMemoryStream.Position=0;将数据复制到内存流之后?也许ZipArchive的手机实现会根据需要进行搜索,但RT的版本不会?我假设您在这两种情况下使用的代码完全相同