【问题标题】:windows store adding files in zip archieve dynamicallyWindows 存储在 zip 存档中动态添加文件
【发布时间】:2014-05-20 07:34:47
【问题描述】:

我从这个链接得到了一个代码:

http://www.codeproject.com/Tips/515704/Archive-Multiple-Files-In-Zip-Extract-Zip-Archive

以 zip 格式压缩和提取文件。

但是代码中的压缩部分只是创建了一个空的 zip 文件,那么我如何在这个 zip 档案中以编程方式添加文件?

我已经检查了 ziparchieve 类的文档,它有一个名为 CreateEntryFromFile(String, String) 的 .net 方法,但是此方法不适用于 .net windows store 版本。

这是我们关心的代码:

private async void ZipClick(object sender, RoutedEventArgs e)
{
FileSavePicker picker = new FileSavePicker();
picker.FileTypeChoices.Add("Zip Files (*.zip)", new List<string> { ".zip" });
picker.SuggestedStartLocation = PickerLocationId.Desktop;
picker.SuggestedFileName = "1";
zipFile = await picker.PickSaveFileAsync();

using (var zipStream = await zipFile.OpenStreamForWriteAsync())
{
    using (ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create))
    {
        foreach (var file in storeFile)
        {
            ZipArchiveEntry entry = zip.CreateEntry(file.Name);

            using (Stream ZipFile = entry.Open())
            {
                byte[] data = await GetByteFromFile(file);
                ZipFile.Write(data, 0, data.Length);
            }
        }
    }
}
}

【问题讨论】:

    标签: c# windows-store-apps zip compression


    【解决方案1】:

    我误解了示例代码,它实际上可以将您第一次传递的文件存档,但我不确定以后是否可以使用相同的方法将其他文件添加到同一个 zip 文件中。

      public async void zipit(StorageFile zipFile, StorageFile file)
        {
         using (var zipToOpen = await zipFile.OpenStreamForWriteAsync())
            {
                using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                {
                    ZipArchiveEntry readmeEntry = archive.CreateEntry(file.Name);
                    using (Stream writer = readmeEntry.Open())
                    {
                        //writer.WriteLine("Information about this package.");
                        //writer.WriteLine("========================");
                        byte[] data = await GetByteFromFile(file);
                        writer.Write(data, 0, data.Length);
                    }
                }
            }
        } 
    

    其中“zipFile”是您选择在 (destination) 中存档的文件,“file”是原始的非压缩文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 2011-09-15
      • 1970-01-01
      • 2014-09-27
      相关资源
      最近更新 更多