0

zip パスワード ファイルがあり、このパスワードを知っています。

この zip ファイルを Windows 8 メトロ アプリ プログラム コードで開く必要があります。

ただし、'System.IO.Compression.ZipArchive' は、Windows 8 メトロ アプリ プログラム コードでパスワードを使用して zip を解凍することはサポートされていません。

私は SharpZipLib と DotNetZip を試しています。しかし、それらはネット 4.5 をサポートしていません。だから私はメトロプログラムコードでそれらを使用しません。

私はIonic.Zipを試しています。プログラムコードでは問題ありません。Windows ストアにアップロードするパッケージをビルドしたいと考えています。ただし、マイクロソフトのコード レビューには合格しません。

別の方法はありますか?どうもありがとう

4

2 に答える 2

0

https://sharpcompress.codeplex.com/を使用できます。それはオープンファイルzipをサポートし、パスワードを持っています

コードベロー

//ファイル zip にファイル pdf がある場合、ファイル xml

async void Read(StorageFile ファイル) {

        MemoryStream memoryFilePDf = new MemoryStream();

        MemoryStream memoryFileXml = new MemoryStream();

        FilePdf = null;

        FileXml = null;


        using (var zipStream = await file.OpenStreamForReadAsync())
        {
            using (MemoryStream zipMemoryStream = new MemoryStream((int)zipStream.Length))
            {
                await zipStream.CopyToAsync(zipMemoryStream);
                try
                {
                    using (var archive = ZipArchive.Open(zipMemoryStream, PassWord))
                    {
                        bool isFilePdf = false;
                        foreach (var entry in archive.Entries)
                        {
                            if (!entry.Key.ToLower().EndsWith(".pdf") && !entry.Key.ToLower().EndsWith(".xml"))
                            {
                                continue;
                            }

                            if (entry.Key.ToLower().EndsWith(".pdf"))
                            {
                                isFilePdf = true;
                                entry.WriteTo(memoryFilePDf);
                            }
                            else
                            {
                                isFilePdf = false;
                                entry.WriteTo(memoryFileXml);
                            }

                            var fileName = entry.Key.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries).LastOrDefault();
                            var createFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(fileName, Windows.Storage.CreationCollisionOption.GenerateUniqueName);

                            using (IRandomAccessStream stream = await createFile.OpenAsync(FileAccessMode.ReadWrite))
                            {
                                // Write compressed data from memory to file
                                using (Stream outstream = stream.AsStreamForWrite())
                                {
                                    byte[] buffer = isFilePdf ? memoryFilePDf.ToArray() : memoryFileXml.ToArray();
                                    outstream.Write(buffer, 0, buffer.Length);
                                    outstream.Flush();
                                }
                            }

                            if (isFilePdf)
                            {
                                FilePdf = createFile;
                            }
                            else
                            {
                                FileXml = createFile;
                            }

                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }
    }
于 2015-11-02T08:25:33.607 に答える
0

このSystem.IO.Compression.FileSystemアセンブリは Windows ストア アプリでは使用できないため、 ZipFileExtensions クラスExtractToDirectoryの拡張メソッドは使用できません。

DirectoryInfo、FileInfo などの代わりに、StorageFile を使用します。Metro スタイル アプリでファイルを読み書きする方法の詳細については、データとファイルへのアクセスとファイル アクセスのサンプルを参照してください。次に、ファイルからストリームにデータを読み取り、それを次のいずれかのクラス (選択したクラス) のメソッドに渡す必要があります。

于 2012-11-27T05:28:13.350 に答える