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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0416
名も無き冒険者ZIP圧縮 パスワード等17解決


名も無き冒険者

リンク

2011/4/16(Sat) 12:17:01|NO.38432

#uselib "ZIP32J.DLL"
#cfunc Zip "Zip" sptr, sptr, var, sptr

sdim ggg, 20000
a=Zip( hwnd, "-r test.zip test.txt", ggg, 1024*1024 )
if a != 0 : dialog "Error"

上記のソースでZIP圧縮に成功したのですが

□圧縮中に表示される画面をなくしたいです
□圧縮したZIPにパスワードをつけたいです
■大容量のデータ・フォルダ数だとエラーが出ます(原因が分かりません(><)

上記の□を実現し■を解決したいのですが自分の知識では分かりませんでした><

誰か教えて下さい!!

回答よろしくお願いします( _ _ )



この記事に返信する


Cookies

リンク

2011/4/16(Sat) 12:28:56|NO.38434

ちゃんとZIP32Jをダウンロードしたら、そのフォルダ内の"SDK"->"CMD_ZIP.TXT"
を読んでください。

それをZipAPIにコマンドとして渡してあげればpwをつけれます。

pw以外については調査中…



Cookies

リンク

2011/4/16(Sat) 12:42:16|NO.38436

sdimでgggは20000バイト確保されてますが、
なぜAPIでは、1024*1024バイト確保されてるように呼び出してるんでしょう?

もしかしたら、大容量のファイルだと結果がたくさん返ってきてエラーかもしれません。



名も無き冒険者

リンク

2011/4/16(Sat) 13:21:10|NO.38438

回答ありがとうございます
-pで色々試してみたのですが中々上手くいきません・・・
どのように書けばいいのでしょうか..



Cookies

リンク

2011/4/16(Sat) 13:38:58|NO.38440

コマンドはですね、大文字小文字が違う文字として判断されることもしばしばです。
SDKには「-p」ではなく「-P」とあります。

単純なレスの時の文字入力ミスならすいません。ほかの理由ですね。



名も無き冒険者

リンク

2011/4/16(Sat) 17:39:57|NO.38451

-Pでも色々試してみたのですが自分の知識不足ため出来ませんでした・・・

中々難しいです・・・



Cookies

リンク

2011/4/16(Sat) 18:04:30|NO.38452

そですか…
僕もやってみましたが、
#uselib "ZIP32J.DLL"
#cfunc Zip "Zip" sptr, sptr, var, sptr sdim ggg, 20000 a=Zip( hwnd, "-P abcd -r test.zip test.txt", ggg, 1024*1024 ) if a != 0 : dialog "Error"
で普通に「abcd」がパスワードの書庫ができました。



名も無き冒険者

リンク

2011/4/16(Sat) 19:19:41|NO.38454

まさかこんな簡単に出来るとは、、、

出来ました!!

回答ありがとうございました!!



名も無き冒険者

リンク

2011/4/16(Sat) 22:16:19|NO.38458

解決のスレを出しながらまた質問をしてすいません

----------------------------------------------------
sdimでgggは20000バイト確保されてますが、
なぜAPIでは、1024*1024バイト確保されてるように呼び出してるんでしょう?
もしかしたら、大容量のファイルだと結果がたくさん返ってきてエラーかもしれません。
----------------------------------------------------

大容量のファイルというより大多数のファイルだと結果がたくさん返ってきてエラーが出るようです
このエラーにずっと悩まされています
どうにか改善する方法はないでしょうか?



mamo

リンク

2011/4/17(Sun) 01:05:31|NO.38465

Cookiesさんのスクリプトを見て驚くほど簡単だと理解できているならば、
「大容量のファイル」と名も無き冒険者さんの言う「大多数のファイル」の両方で試したのですよね?



名も無き冒険者

リンク

2011/4/17(Sun) 01:25:21|NO.38466

勘違いされているようですが
理解が簡単という訳ではなくソースに-Pを追加するだけで良かったのが簡単という意味です

本題ですが、
大容量で少数のファイルでは1GB以上をを確認しました
小容量で大多数のファイルですと必ずエラーが発生します

自分の環境では上記を確認しております



mamo

リンク

2011/4/17(Sun) 02:11:16|NO.38467

>〜-Pを追加するだけで良かったのが簡単という意味です
Cookiesさんが教えてくれた事に対して「色々と試してみたのですが〜」
結局は記述方法だけでも調べてたらこんな返答にはならないはずで、
今現在のエラーに対しても、とりあえず回避しておく方法がこのページで書かれてるよ?



mamo

リンク

2011/4/17(Sun) 09:32:23|NO.38469

gggをそのままの時にファイル数でエラーなのかと思って数パターン試したけど、ファイル数だけじゃなく容量(?)の違いでも正常動作しないことがあるかも。
もっと試したかったけどメモリーが2GBしか積まれてないのと、9割がた使い切ってる状態のせい?で以上終了多発のため終了^^;



Cookies

リンク

2011/4/17(Sun) 09:44:38|NO.38470

知らぬ間にだいぶこのスレにレスが付いていた…

>>名も無き冒険者さん
>大容量のファイルというより大多数のファイルだと結果がたくさん返ってきてエラーが出るようです
 どっちにしたってたくさん結果が返ってくるのは同じです。
 それに、エラーが回避できなかったとしたって、バッファがそこまで確保されてないのに
 多く確保されているかのようにAPIを呼び出すのは問題です。
 
 gggを1024*1024確保するか、Zip第四引数を20000にするかどっちかに直してみましたか?



名も無き冒険者

リンク

2011/4/17(Sun) 14:20:40|NO.38476

#uselib "ZIP32J.DLL"
#cfunc Zip "Zip" sptr, sptr, var, sptr

sdim ggg, 900000
a=Zip( hwnd, "-r test.zip test.txt", ggg, 1024*1024 )
if a != 0 : dialog "Error"

900000にすると全くエラーが出なくなりました

色々調べてみたのですが『第4引数』とは何でしょうか?



Cookies

リンク

2011/4/17(Sun) 14:35:31|NO.38477

「引数」という言葉を知らないのだろうか、
「第四引数」が何を示しているのか知らないのだろうか。

「引数」というのは、たとえばsdim ggg, 900000のときの「ggg」と「900000」のことである。
命令だけでなく、関数にも言えることで、
Zip(hwnd, "コマンド", ggg, 1024)のときの「hwnd」と「"コマンド"」、「ggg」と「1024」のこと。
引数とは命令や関数に与えるパラメータのことである。
第四引数とは、四番目の引数、Zip(hwnd, "-r test.zip test.txt", ggg, 1024*1024)の場合であれば
「1024*1024」を指している。


Zip関数の第四引数のあらわすものは、第三引数の結果を返す変数の確保されているサイズである。
"zip32j\SDK\API_ZIP.txt"内を見てもらえばわかるだろう。
HSP内ではなく、DLLなどを用いて関数を使う場合、
普通、与えられた変数の確保サイズは呼び出された関数内で調べるすべはない。
ということで、確保サイズを引数として渡すことによって知ろうということ。

gggという変数名のものがメモリ内に確保されるわけだが、
メモリも有限なので予め使う分だけを使えるようにし、残りはほかで使うようにせねばならない。
sdim ggg, 20000では、gggを20000バイト(半角文字20000文字分)確保しているが、
Zip関数の第四引数には1024*1024=1048576バイト確保されているように指定されたため、
関数内部では、何も知らずに20001バイト目を書き込もうとする。
が、そこは実際確保されていないため、アクセス違反→エラーとなる。



Cookies

リンク

2011/4/17(Sun) 14:37:56|NO.38478

900000でうまくいったのは運が良かったから。
もっとファイル数を多くしたりするとアクセス違反が起こる。

Zip( hwnd, "-r test.zip test.txt", ggg, 1024*1024 )に合わせるのであれば、
sdim ggg, 1024*1024をあらかじめしなければならないし、

sdim ggg, 900000をしたければ
Zip( hwnd, "-r test.zip test.txt", ggg, 900000)とするべきである。



なぜだろう。とくに意識もしてないが口調が変わった。



名も無き冒険者

リンク

2011/4/17(Sun) 14:58:35|NO.38479

>>Cookiesさん

詳しい説明付きで回答ありがとうございます
自分も引数などについて少し分かってきました

実際にご指摘された通りにソースを組み実行してみた所5GBまで確認出来ました
※5GB以上は試しておりません

お蔭様で解決しました
回答ありがとうございました



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