HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0926
おにぎりHSPでzipを解凍しないで中身を変える11解決


おにぎり

リンク

2011/9/26(Mon) 19:03:03|NO.41729

HSPでzipを解凍しないで中身を変えるということは可能ですか?
出来ればやり方を教えていただきたいです。

無茶なことを聞いてしまってすみませんよろしくお願いします。



この記事に返信する


れみはる

リンク

2011/9/26(Mon) 20:12:01|NO.41739

一旦Tempフォルダーにでも解凍して再圧縮でいいと思うのですが。

そのためのTemporary(一時的)フォルダーですから。



おにぎり

リンク

2011/9/26(Mon) 21:14:35|NO.41742

7zipみたいなのがつくりたいんですよね・・・



TTRUKO

リンク

2011/9/26(Mon) 21:34:28|NO.41743

XP以降のWindowsは、zipfldr.dllというのが入ってて
ZIPファイルを普通のフォルダのように扱う機能が使える(ファイルをZIPの中にコピーしたり削除したりできる)のですが
この機能をわざと消してる人もいるので、あまりオススメはできないかなぁ〜…
HSPでこれを利用してるサンプルも見かけた憶えはないですし^^;



おにぎり

リンク

2011/9/26(Mon) 22:37:40|NO.41755

ZIPファイルを普通のフォルダのように扱う機能
これをやる方法はやっぱりないんですかね・・・(´・ω・`)



れみはる

リンク

2011/9/27(Tue) 10:56:49|NO.41763

>7zipみたいなのがつくりたいんですよね・・・
>これをやる方法はやっぱりないんですかね・・・
いや、だからテンポラリーフォルダーをうまく活用して、あたかも解凍せずに中身を編集しているように見せかければいいのでは?

割と多いですよ。こういう仕組みのソフトって。



TTRUKO

リンク

2011/9/27(Tue) 11:33:06|NO.41764

外部DLLオッケーなら、7-zip32.dll(zipも扱えます)を使えば、大抵のことはできると思います〜。

#uselib "7-zip32.dll" #cfunc SevenZip "SevenZip" int, str, var, int #func SevenZipSetBackGroundMode "SevenZipSetBackGroundMode" int zipName = "C:\\Temp\\aaa.zip" fileName1 = "C:\\Temp\\aaa.txt" fileName2 = "C:\\Temp\\bbb.txt" // コマンドの作成 // a : 追加モード // d : 削除モード // -hide : 進捗状況表示をしない // -tzip : 圧縮形式指定 // -ssw : 使用中のファイルも対象にする addCmd = "a -hide -tzip -ssw \"" + zipName + "\" \"" + fileName1 + "\" \"" + fileName2 + "\"" delCmd = "d -hide \"" + zipName + "\" \"" + fileName1 + "\"" // バックグラウンドモードOFF SevenZipSetBackGroundMode( 0 ) // 圧縮実行(aaa.txtとbbb.txtをzipに追加) sdim result, 256 if ( SevenZip( hwnd, addCmd, result, 256 ) = 0 ) { mes "圧縮成功" } else { mes "圧縮失敗" } // 削除実行(aaa.txtだけを削除) if ( SevenZip( hwnd, delCmd, result, 256 ) = 0 ) { mes "削除成功" } else { mes "削除失敗" }
上の使い方以外にも、ワイルドカード指定や、フォルダを丸ごと対象にしたり、といったこともできます。
(詳しくは7-zip32.dll同梱の7-zipCMD.txt参照)



おにぎり

リンク

2011/9/27(Tue) 16:39:02|NO.41766

TTRUKO様ありがとうございました うまくできました

最後までこんな事聞いちゃってすみませんが
このdll
を自分のソフトと一緒に公開しても大丈夫ですか
よろしくお願いします



check

リンク

2011/9/27(Tue) 16:43:29|NO.41767

それはそのDLLのライセンスを見てみればいいだろ。

7-ZIPはオープンソースだから大概LGPLかBSDライセンスのどちらかだろうが、
確認しておけよ。



TTRUKO

リンク

2011/9/27(Tue) 17:03:31|NO.41768

あ、よく見たら、
削除時に"C:\\Temp\\aaa.txt"という元ファイルパスを指定するのはおかしいですね…ミスった^^

delCmd = "d -hide \"" + zipName + "\" \"" + "aaa.txt" + "\""

自分が作ったプログラムに同梱しての再配布は可能ですけども
ライセンスやコピーライトについて明記したtxtファイルを同梱しておいたほうがいいです。
LGPLについてはググれば色々情報が出てきます〜。
ttp://okwave.jp/qa/q5970360.html



skyblue

リンク

2011/9/27(Tue) 18:31:10|NO.41771

>7-ZIPはオープンソースだから大概LGPLかBSDライセンスのどちらかだろうが、
>確認しておけよ。

7-zip32.txtによると
>7-zip32.dll は GNU Lesser General Public License (LGPL)
>の元で配布されています。
>ソフトの改変、再配布等については LGPL に従ってください。
>http://www.gnu.org/copyleft/lesser.ja.html
となってます。



おにぎり

リンク

2011/9/27(Tue) 19:01:23|NO.41779

皆さん有り難うございました
TTRUKO様サンプルコードありがとうございます



ONION software Copyright 1997-2023(c) All rights reserved.