none
フォルダのZIP圧縮について RRS feed

  • 質問

  • .net framework4.5よりフォルダのZIP圧縮ができるとのことだったので、Visual Basic2015で実装しました。

    フォルダ内に複数のファイルが存在するときはフォルダで圧縮されますが、フォルダ内に1つのファイルしかない場合は、ファイルのみが圧縮されてしまいます。

    これは、仕様なのでしょうか?それとも別の方法があるのでしょうか?

    コマンドは、ZipFile.CreateFromDirectoryを使用しています。

    2016年10月4日 7:37

回答

  • ZipFile.CreateFromDirectoryのRemarksセクションで説明されている通り仕様であり、別の方法も紹介されています。

    This method overload does not include the base directory in the archive and does not allow you to specify a compression level. If you want to include the base directory or specify a compression level, call the CreateFromDirectory(String, String, CompressionLevel, Boolean) method overload.
    • 回答としてマーク 星 睦美 2016年10月28日 2:51
    2016年10月4日 8:07
  • ZipFile.CreateFromDirectory("c:\root\src", "c:\dest.zip")
    

    と書いたときに、dest.zipをエクスプローラで開くと、

    • srcフォルダにファイルが1つしかない:直下にファイルが見える
    • srcフォルダにファイルが2つ以上ある:直下にsrcフォルダが見える

    という状況、で合っているでしょうか?(ビューアによっては見え方が変わる可能性があるので、念のためにエクスプローラで確認してみてください)

    こちらでは再現しません(.NET 4.6.1で確認)が、とりあえずCreateFromDirectory(String, String, CompressionLevel, Boolean)と4つ引数を取る方のを使用し、第4引数をTrueに設定した場合はどうでしょうか?

    • 回答としてマーク 星 睦美 2016年10月28日 2:51
    2016年10月4日 8:12

すべての返信

  • ZipFile.CreateFromDirectoryのRemarksセクションで説明されている通り仕様であり、別の方法も紹介されています。

    This method overload does not include the base directory in the archive and does not allow you to specify a compression level. If you want to include the base directory or specify a compression level, call the CreateFromDirectory(String, String, CompressionLevel, Boolean) method overload.
    • 回答としてマーク 星 睦美 2016年10月28日 2:51
    2016年10月4日 8:07
  • ZipFile.CreateFromDirectory("c:\root\src", "c:\dest.zip")
    

    と書いたときに、dest.zipをエクスプローラで開くと、

    • srcフォルダにファイルが1つしかない:直下にファイルが見える
    • srcフォルダにファイルが2つ以上ある:直下にsrcフォルダが見える

    という状況、で合っているでしょうか?(ビューアによっては見え方が変わる可能性があるので、念のためにエクスプローラで確認してみてください)

    こちらでは再現しません(.NET 4.6.1で確認)が、とりあえずCreateFromDirectory(String, String, CompressionLevel, Boolean)と4つ引数を取る方のを使用し、第4引数をTrueに設定した場合はどうでしょうか?

    • 回答としてマーク 星 睦美 2016年10月28日 2:51
    2016年10月4日 8:12