- - PR -
java.util.zip.ZipEntryを使用して空フォルダの圧縮方法について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-08-08 11:10
お世話になります。
ZIP圧縮の空フォルダの圧縮方法についてお聞きしたいのですが 過去ログに http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16516&forum=12&4 があり、空フォルダの圧縮が可能であることはわかりましたが 具体的なソースコードがわかりません。 ご教授お願いいたします。 WindowsXP、VS2005です。 Dim lo_fos As New java.io.FileOutputStream("ZIP出力先パス") 'ZipOutputStreamの作成 Dim lo_zos As New java.util.zip.ZipOutputStream(lo_fos) Dim ls_Dir As String = "C:\TEST\B\" ↑Bフォルダ(フォルダ内は空)を圧縮したい Dim ls_F As String = ls_Dir ls_F = ls_F.Replace("\", "/") Dim ze As New java.util.zip.ZipEntry(ls_F) ze.setMethod(java.util.zip.ZipEntry.DEFLATED) lo_zos.putNextEntry(ze) Dim lo_fis As New java.io.FileInputStream(ls_F) ↑ここでエラーになります。 そもそもフォルダなのでFileInputStream自体が間違いなのかな? Dim buffer(8191) As System.SByte While True Dim len As Integer = lo_fis.read(buffer, 0, buffer.Length) If len <= 0 Then Exit While End If lo_zos.write(buffer, 0, 0) End While lo_fis.close() lo_zos.closeEntry() | ||||
|
投稿日時: 2008-08-08 12:00
そうですね。 java.util.zip.ZipEntry のコンストラクタで '/' で終わるディレクトリ名を指定するだけで良いです。 あとはファイルと同じ要領になります。 # zip の閲覧時はこれだけだとダメかな。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-08-08 13:16
じゃんぬねっとさん回答ありがとうございます。
>そうですね。 java.util.zip.ZipEntry のコンストラクタで '/' で終わるディレクト>リ名を指定するだけで良いです。 >あとはファイルと同じ要領になります。 ということは、最初に記載した構文でいいということでしょうか? 実行してみるとやはり以下の部分でエラーが発生してしまいます。 (フォルダはちゃんと存在しているフォルダを指定しています・・) >Dim lo_fis As New java.io.FileInputStream(ls_F) > ↑ここでエラーになります。 [ メッセージ編集済み 編集者: 馬鹿者>< 編集日時 2008-08-08 13:24 ] | ||||
|
投稿日時: 2008-08-08 13:20
あっすいません、ちなみにエラーは
FileNotFoundExcepctionはハンドルされませんでした。 でした。 | ||||
|
投稿日時: 2008-08-08 13:30
すみません、私の 'そうですね' に係る言葉は "FileInputStream自体が間違い" になります。 ファイルではないのですから読み取れないですし、ディレクトリに何か内容が含まれるわけではないのでそもそも読み取る必要がないですよね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-08-08 14:18
自分で読んでいてもわかりにくいと思ったので単刀直入に書きます。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-08-08 14:24
じゃんぬねっとさん何度もありがとうございます。
なるほどファイルなので読み取る必要ないということですね writeの方法がわかりませんでしたが、0バイト指定でやればできました。 ありがとうございました。 Dim lo_fos As New java.io.FileOutputStream("ZIP出力先パス") 'ZipOutputStreamの作成 Dim lo_zos As New java.util.zip.ZipOutputStream(lo_fos) Dim ls_Dir As String = "C:\TEST\B\" ↑Bフォルダ(フォルダ内は空)を圧縮したい Dim ls_F As String = ls_Dir ls_F = ls_F.Replace("\", "/") Dim ze As New java.util.zip.ZipEntry(ls_F) ze.setMethod(java.util.zip.ZipEntry.DEFLATED) lo_zos.putNextEntry(ze) lo_zos.write(0) lo_fis.close() lo_zos.closeEntry() | ||||
|
投稿日時: 2008-08-08 15:17
じゃんぬねっとさん回答ありがとうございます。
>writeの方法がわかりませんでしたが、0バイト指定でやればできました。 >ありがとうございました。 おおうそでした>< ZIPファイルではなく圧縮前のフォルダをみてました(おおぼけ) 以下のソースで試してみました。 isDirectory はTrueが返却されました。 でCloseEntryで閉じてできたZIPをみてみましたが、フォルダがありません>< どこか間違っていますでしょうか・・・ Dim ls_Dir As String = "D:\TEST\B\" Dim ls_F As String = ls_Dir ls_F = ls_F.Replace("\", "/") Dim ze As New java.util.zip.ZipEntry(ls_F) ze.setMethod(java.util.zip.ZipEntry.DEFLATED) lo_zos.putNextEntry(ze) If ze.isDirectory = True Then lo_zos.closeEntry() End If lo_zos.close() lo_fos.close() 追加です。 できない原因がわかりました。 フルパスでやってたからみたいでした。 で一応追加されたのですが、フォルダではなくファイルになってしまいました>< [ メッセージ編集済み 編集者: 馬鹿者>< 編集日時 2008-08-08 15:34 ] さらに追加 ZIP内を見てみるとファイルと表示されていますが展開してみるとフォルダになっていました。 これで問題はないのでしょうか? [ メッセージ編集済み 編集者: 馬鹿者>< 編集日時 2008-08-08 15:40 ] |