====== Visual J# ライブラリによるZIP圧縮 ====== [C#] using System.IO; using java.io; using java.util; using java.util.zip; public class ZipUtility { public static void Compress(string[] sourceFileNames, string zipFileName) { // 読み込みバッファサイズを定義 const int BUF_SIZE = 8192; // ZipOutputStreamを開く FileOutputStream zipFileStream = new FileOutputStream(zipFileName); ZipOutputStream zipOutputStream = new ZipOutputStream(zipFileStream); try { for (int fileIdx = 0; fileIdx < sourceFileNames.Length; fileIdx++) { // ZIP書庫に追加するファイル名を取得 string fileName = Path.GetFileName(sourceFileNames[fileIdx]); // ZIPエントリを作成 ZipEntry zipEntry = new ZipEntry(fileName); // ***** ZIPエントリのファイル更新時刻を設定 ***** // ファイルのタイムスタンプを世界協定時刻(UTC)にて取得 DateTime lastWriteTimeUtc = System.IO.File.GetLastWriteTimeUtc(sourceFileNames[fileIdx]); // UTCをグリニッジ標準時(GMT)形式の文字列に変換 string lastWriteTimeGMT = lastWriteTimeUtc.ToString("R"); // java.util.Date(String s)のコンストラクタにてDateインスタンスを生成 Date lastWriteTime = new Date(lastWriteTimeGMT); // Date.getTime()にてエポックタイム(1970/01/01 00:00:00からのミリ秒)を取得 long lastWriteEpochTime = lastWriteTime.getTime(); // ZIPエントリのファイル更新時刻として設定 zipEntry.setTime(lastWriteEpochTime); // ZIPエントリの圧縮メソッド(DEFLATED)を設定 zipEntry.setMethod(ZipEntry.DEFLATED); // ZipOutputStreamにZIPエントリを追加 zipOutputStream.putNextEntry(zipEntry); // 圧縮元ファイルを開く FileInputStream sourseInputStream = new FileInputStream(sourceFileNames[fileIdx]); // 読み込みバッファを作成 byte[] buffer = new byte[BUF_SIZE]; // 読み込みサイズを保持 int readSize; // ファイルをすべて読み込む while((readSize = sourceInputStream.read(buffer, 0 buffer.Length)) > 0) { // バッファ内容を圧縮して書き込む zipOutputStream.write(buffer, 0, readSize); } // 圧縮元ファイルを閉じる sourseInputStream.close(); // ZIPエントリを閉じる zipOutputStream.closeEntry(); } } finally { // ZipOutputStreamを閉じる zipOutputStream.close(); zipFileStream.close(); } } }