2017年12月21日木曜日

SharpZipLibでZIP書庫ファイルをZIP書庫にするとエラー?

SharpZipLibを使ってファイルをZIP書庫に圧縮するプログラムで、ZIP書庫を対象にするとうまくいっていないことが判明して調査してみました。
通常の疑似コードだとこんな感じ。
string fromFile = @"c:\test.txt"; //圧縮する元のファイル
string toFile = @"c:\test.zip"; //圧縮ファイル名
FastZip.CreateZip(toFile, work_path, false, "test.txt", null);

これで元ファイルがZIP書庫だと
fromFile = @"c:\test.zip";
toFile = @"c:\test.zip";
となってしまい、読み込み元と書き込み先が同じになってしまいます。

当然回避するようにしていました。(以下疑似コード)
if(fromFile == toFile)
{
  toFile=fromFile + ".t";
}
ファイル名の末尾にさらに .t を追加して対応。
圧縮後ファイル名を変更するようにしておりました。

しかーし。実際は「toFile は他のプロセスが使用中」という例外が出ていました。
見た目、同じファイルが残るので気づかなかった(笑

".t"を"_t"とか".zip"とかにしても同様で。
やむなく、一時的なファイル名(時刻と秒を文字列化した一時ファイル名)を作成して処理するように変更しました。

要するに、SharpZipLib 使う際、圧縮先のファイル名には似たような名前が使えない(らしい)ということのようです。

と、いうことで Outlook用の暗号化添付プラグインをバージョンアップしました。
こちらから最新版をダウンロードできます。
https://seasoft.co.jp/products/BizAttacher.html
無料でも使えます。1か月お試し運用もできます!

0 件のコメント:

コメントを投稿