none
System.IO.PackagingでZIP書庫を作成したいのですが... RRS feed

  • 質問

  • こんにちは

    Win7+VS2008でZIP書庫を作成しようとしています。  

    System.IO.Packaging名前空間を使用して下記のような関数を作成しました。

    この関数を実行すると、ZIP書庫自体は作成されるのですが、書庫に格納されるはずのファイルが書庫内に存在せず、

    書庫内には[Content_Types].xmlというファイルしか存在せず、ファイル内容は以下の通りです。

    <?xml version="1.0" encoding="utf-8" ?>
    - <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
      <Default Extension="xls" ContentType="" />
      </Types>

    CreatePart関数の第2引数に何を渡していいのかわからないので空文字を引数としているのが悪いのでしょうか?

    壁にぶち当たっています。

    どなたか、アドバイスをお願いいたします。

    private bool test_CreateZIP()
      {
       try
       {
        // ZIP書庫を作成する
        string packagePath = "C:\\Temp\\testCreateZip.zip";
        Package package = Package.Open(@packagePath, FileMode.Create, FileAccess.ReadWrite);

        // 書庫に入れるファイル
        byte[] buffer = new byte[1024];
        int readSize = 0;

        string documentPath = "C:\\Temp\\testCreateZip.xls";
        Uri partUriDocument = PackUriHelper.CreatePartUri(new Uri(@documentPath, UriKind.Relative));

        // CreatePart関数の第2引数は何を渡せばいいのだろう?
        PackagePart packagePartDocument = package.CreatePart(partUriDocument, "", CompressionOption.Normal);
        FileStream fs = new FileStream(documentPath, FileMode.Open, FileAccess.Read);

        while((readSize = fs.Read(buffer, 0, buffer.Count())) > 0)
         packagePartDocument.GetStream().Write(buffer, 0, readSize);

        fs.Close();

        package.Flush();
        package.Close();
        MessageBox.Show("created!!", "success");
        return true;
       }
       catch (Exception ex)
       {
        MessageBox.Show(ex.Message, "エラー");
        return false;
       }
      }

    2010年10月26日 7:45

回答

  • こんにちは、おのでらです。

    Zip ファイルを操作したいのであれば DotNetZip はいかがでしょうか。Microsoft Public License (Ms-PL) で提供されています。.NET Framework 2.0 SP1 ベースですが .NET Framework 4 からでも使えることは確認しています。

    使い方は Web で調べれば結構出てきますし、実際使ってみると簡単に ZIP ファイルを扱えます。(ファイルを1つ Zip ファイルにするだけであれば最短3行くらいでしょうか)

    • 回答としてマーク mokosan 2010年10月28日 8:18
    2010年10月28日 3:29

すべての返信

  • http://bbs.wankuma.com/index.cgi?mode=all&namber=54040

    ZipPackage は zip 書庫を作るのが主題ではありませんが、大丈夫ですか?

    2010年10月26日 8:06
  • こんにちは、おのでらです。

    Zip ファイルを操作したいのであれば DotNetZip はいかがでしょうか。Microsoft Public License (Ms-PL) で提供されています。.NET Framework 2.0 SP1 ベースですが .NET Framework 4 からでも使えることは確認しています。

    使い方は Web で調べれば結構出てきますし、実際使ってみると簡単に ZIP ファイルを扱えます。(ファイルを1つ Zip ファイルにするだけであれば最短3行くらいでしょうか)

    • 回答としてマーク mokosan 2010年10月28日 8:18
    2010年10月28日 3:29
  • Hongliangさん

    おのでらさん

    返信ありがとうございます。

    ZipPackageを誤解していたようですね、今少し理解を深めてみます。

    DotNetZipは恥ずかしながら知りませんでした。

    利用可能かどうか試してみます。

    2010年10月28日 8:18