差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
dotnet:vjslib_zip [2009/05/26 18:28] – 作成 ともやん | dotnet:vjslib_zip [2019/05/18 02:23] (現在) – 外部編集 非ログインユーザー | ||
---|---|---|---|
行 1: | 行 1: | ||
====== Visual J# ライブラリによるZIP圧縮 ====== | ====== Visual J# ライブラリによるZIP圧縮 ====== | ||
+ | [C#] | ||
<code csharp> | <code csharp> | ||
using System.IO; | using System.IO; | ||
行 8: | 行 9: | ||
public class ZipUtility | public class ZipUtility | ||
{ | { | ||
- | public static | + | |
- | { | + | { |
- | // ZipOutputStreamを開く | + | // 読み込みバッファサイズを定義 |
- | FileOutputStream zipFileStream = new FileOutputStream(zipFileName); | + | const int BUF_SIZE = 8192; |
- | ZipOutputStream zipOutputStream = new ZipOutputStream(zipFileStream); | + | |
- | + | | |
- | try | + | FileOutputStream zipFileStream = new FileOutputStream(zipFileName); |
- | { | + | ZipOutputStream zipOutputStream = new ZipOutputStream(zipFileStream); |
- | for (int fileIdx = 0; fileIdx < sourceFileNames.Length; | + | |
- | { | + | try |
- | // ZIP書庫に追加するファイル名を取得 | + | { |
- | string fileName = Path.GetFileName(sourceFileNames[fileIdx]); | + | for (int fileIdx = 0; fileIdx < sourceFileNames.Length; |
- | + | { | |
- | // ZIPエントリを作成 | + | // ZIP書庫に追加するファイル名を取得 |
- | ZipEntry zipEntry = new ZipEntry(fileName); | + | string fileName = Path.GetFileName(sourceFileNames[fileIdx]); |
- | + | ||
- | // ***** ZIPエントリのファイル更新時刻を設定 ***** | + | // ZIPエントリを作成 |
- | // ファイルのタイムスタンプを世界協定時刻(UTC)にて取得 | + | ZipEntry zipEntry = new ZipEntry(fileName); |
- | DateTime lastWriteTimeUtc = System.IO.File.GetLastWriteTimeUtc(sourceFileNames[fileIdx]); | + | |
- | // UTCをグリニッジ標準時(GMT)形式の文字列に変換 | + | // ***** ZIPエントリのファイル更新時刻を設定 ***** |
- | string lastWriteTimeGMT = lastWriteTimeUtc.ToString(" | + | // ファイルのタイムスタンプを世界協定時刻(UTC)にて取得 |
- | // java.util.Date(String s)のコンストラクタにてDateインスタンスを生成 | + | DateTime lastWriteTimeUtc = |
- | Date lastWriteTime = new Date(lastWriteTimeGMT); | + | |
- | // Date.getTime()にてエポックタイム(1970/ | + | // UTCをグリニッジ標準時(GMT)形式の文字列に変換 |
- | long lastWriteEpochTime = lastWriteTime.getTime(); | + | string lastWriteTimeGMT = lastWriteTimeUtc.ToString(" |
- | // ZIPエントリのファイル更新時刻として設定 | + | // java.util.Date(String s)のコンストラクタにてDateインスタンスを生成 |
- | zipEntry.setTime(lastWriteEpochTime); | + | Date lastWriteTime = new Date(lastWriteTimeGMT); |
- | + | // Date.getTime()にてエポックタイム(1970/ | |
- | // ZIPエントリの圧縮メソッド(DEFLATED)を設定 | + | long lastWriteEpochTime = lastWriteTime.getTime(); |
- | zipEntry.setMethod(ZipEntry.DEFLATED); | + | // ZIPエントリのファイル更新時刻として設定 |
- | // ZipOutputStreamにZIPエントリを追加 | + | zipEntry.setTime(lastWriteEpochTime); |
- | zipOutputStream.putNextEntry(zipEntry); | + | |
- | + | // ZIPエントリの圧縮メソッド(DEFLATED)を設定 | |
- | + | zipEntry.setMethod(ZipEntry.DEFLATED); | |
- | } | + | // ZipOutputStreamにZIPエントリを追加 |
- | } | + | zipOutputStream.putNextEntry(zipEntry); |
- | finally | + | |
- | { | + | // 圧縮元ファイルを開く |
- | + | FileInputStream sourseInputStream = | |
- | } | + | new FileInputStream(sourceFileNames[fileIdx]); |
- | } | + | |
+ | // 読み込みバッファを作成 | ||
+ | byte[] buffer = new byte[BUF_SIZE]; | ||
+ | // 読み込みサイズを保持 | ||
+ | int readSize; | ||
+ | // ファイルをすべて読み込む | ||
+ | while((readSize = sourceInputStream.read(buffer, | ||
+ | { | ||
+ | // バッファ内容を圧縮して書き込む | ||
+ | zipOutputStream.write(buffer, | ||
+ | } | ||
+ | |||
+ | // 圧縮元ファイルを閉じる | ||
+ | sourseInputStream.close(); | ||
+ | // ZIPエントリを閉じる | ||
+ | zipOutputStream.closeEntry(); | ||
+ | | ||
+ | } | ||
+ | | ||
+ | { | ||
+ | // ZipOutputStreamを閉じる | ||
+ | zipOutputStream.close(); | ||
+ | zipFileStream.close(); | ||
+ | } | ||
+ | } | ||
} | } | ||
</ | </ | ||