dotnet:vjslib_zip

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();
        }
    }
}
  • dotnet/vjslib_zip.txt
  • 最終更新: 2019/05/18 02:23
  • by 非ログインユーザー