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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
1013
Creeper新機能のzip圧縮機能について16解決


Creeper

リンク

2020/10/13(Tue) 01:11:14|NO.91599

質問を見て頂きありがとうございます。
新機能のzip圧縮機能を使用し、
*comp
; zipファイル圧縮サンプル ; ; (hspインストールフォルダ内のcommonフォルダ以下を圧縮してcommon.zipとして保存します) ; date0=gettime(0) date1=gettime(1) date2=gettime(3) fname = dir_cur+"\\backup\\Ver.0.1-Date."+date0+date1+date2+".zip" s1 = dir_exe+"\\*." ZipCompress s1, fname if stat : dialog "zip圧縮に失敗しました" mes "圧縮元パス:"+s1 mes fname+"を保存しました。" stop
このようなプログラム(ほとんどサンプルそのまま)を作成したのですが、なぜかフォルダ内の特定のファイル(System,ScreenshotなどSのつくもの)がzip内に入らなかったり、buckupフォルダしかzipにならなかったりします。
これはなぜなのでしょうか?
いろいろ試しましたがわかりませんでした.....
教えていただけると嬉しいです!



この記事に返信する


Creeper

リンク

2020/10/13(Tue) 01:14:46|NO.91600

すみません、追記です。
使用している環境はHSP3.6β4です。
ディレクトリ一層目は以下のようになっています。
backup(フォルダ)
BOOT(フォルダ)
hspinet.as
hspinet.dll
hsptmp
hsptmp.exe
Screenshot(フォルダ)
system(フォルダ)
ZLibWrap.dll



MillkeyStars

リンク

2020/10/13(Tue) 09:41:31|NO.91601

圧縮するファイルパスのワイルドカードを正しく指定してください。
s1 = dir_exe+"\\*." となっていますが、正しくは「*.*」または「*」ではありませんか?



Creeper

リンク

2020/10/13(Tue) 15:45:48|NO.91603

返信ありがとうございます。
初期ではそのようになっていましたが、その状態でも同様の問題が起きてしまいます。
*だけになっているのは色々試した時直し忘れました......



MillkeyStars

リンク

2020/10/13(Tue) 17:25:59|NO.91605

バックアップ元のフォルダとバックアップ先のフォルダは当然別のフォルダだよね?

元 : C:\HSP3\* ←バックアップ対象のフォルダ
先 : C:\HSP3\Backup\ ←ZIP 出力先フォルダ

こんな感じで、同じ階層の子孫関係だと、ZIPは作成できないか途中でエラーが発生します。

これが原因ではない場合 ZIPライブラリそのものの可能性が高いです。



Creeper

リンク

2020/10/13(Tue) 17:58:45|NO.91607

なるほど、同じ階層では作成できないんですね、ありがとうございます、試してみます!



Creeper

リンク

2020/10/14(Wed) 03:17:19|NO.91612

無事、全てのファイルが圧縮されました、ありがとうございます!
そして、もう一つ質問させていただきたいです、
#include "hspext.as"
dirtemp="" fxdir dirtemp, -2 date0=gettime(0) date1=gettime(1) date2=gettime(3) fname = dirtemp+"Ver.0.1-Date."+date0+date1+date2+".zip" s1 = dir_exe+"\\*.*" ZipCompress s1, fname if stat : dialog "zip圧縮に失敗しました" mes "圧縮元パス:"+s1 mes fname+"を保存しました。" copyback=dir_exe+"\\backup\\" mes dirtemp+"Ver.0.1-Date."+date0+date1+date2+".zip" mes fname+"\n"+copyback fxcopy fname,copyback if stat : dialog "コピー目標のファイルがTempフォルダーから\n見つかりませんでした。" delete dirtemp+"Ver.0.1-Date."+date0+date1+date2+".zip" stop
上記のようなプログラムを作成したところ、存在するファイルなのにアクセスできず、エラー12となってしまいます。
原因がわからないのですが、どのようにすれば解決するでしょうか....?



Creeper

リンク

2020/10/14(Wed) 03:18:52|NO.91613

追記です。
この場合、どうしてもbackupフォルダー内に生成したかったため、一時的にtempで作成し、その後backupフォルダーにコピーする、という方法を取ろうとしました、



MillkeyStars

リンク

2020/10/14(Wed) 15:14:41|NO.91618

はじめに、fxcopy についてこちらの環境では正しく動作しない為、fxcopy を利用しない形での回答ですのでご了承を。

エラー 12 は、フォルダおよびファイルが存在しない場合と、存在していてもアクセス権によりアクセス拒否された場合に発生します。
スクリプトから考えるとエラー 12 を発生させてる原因は、delete だと思いますが、HSP がファイルに対して書き込みアクセス権限が必要となります。

fxdir の取得フォルダが規定の C:\Users\UserName\AppData\Local\Temp であれば、エラー12 は発生しません。
もし、C:\Windows\Temp だった場合、delete でエラーが発生するのは仕様です。

また、稀な原因ですが、ZIP を作成した際にウィルス対策ソフトが読み取りに行っている場合で、delete を行うとエラーが発生します。これもエラー 12 となります。
(圧縮ファイルの内容も検査するなどの設定の場合)

HSPのエラーですが、スクリプトエディタ上で実行する場合、原因となっている行番号が表示されるのでその行番号で原因を調べてみてください。

[おにたまさん用]
fxcopy : メモリアクセスエラー (0x00000005 : ACCESS DENIED Memory Read Access)


dirtemp="" fxdir dirtemp, -2 date0=gettime(0) date1=gettime(1) date2=gettime(3) fname = dirtemp+"Ver.0.1-Date."+date0+date1+date2+".zip" s1 = dir_exe+"\\*.*" ZipCompress s1, fname if stat : dialog "zip圧縮に失敗しました" mes "圧縮元パス:"+s1 mes fname+"を保存しました。" copyback=dir_exe+"\\backup\\" mes dirtemp+"Ver.0.1-Date."+date0+date1+date2+".zip" mes fname+"\n"+copyback //tempフォルダに存在するか調べる exist fname if stat != -1 { //tempフォルダに存在する、zip のファイル内容の読み込み filesize = strsize sdim MemoryTemp,filesize bload fname,MemoryTemp,filesize //コピー先のファイルが存在するか調べる exist copyback+"Ver.0.1-Date."+date0+date1+date2+".zip" if strsize != -1 { //存在する場合のみ、ファイル抹消 delete copyback+"Ver.0.1-Date."+date0+date1+date2+".zip" } //メモリの内容を出力 bsave copyback+"Ver.0.1-Date."+date0+date1+date2+".zip",MemoryTemp,filesize } // fxcopy fname,copyback // if stat : dialog "コピー目標のファイルがTempフォルダーから\n見つかりませんでした。" delete dirtemp+"Ver.0.1-Date."+date0+date1+date2+".zip" stop
fxcopy・bload/bsave にかかわらず、backup フォルダのバックアップになる為、何度か試すとzip が肥大化していくので注意です。

[2020/10/14 15:14分 : 内容編集済み]



Creeper

リンク

2020/10/14(Wed) 15:49:28|NO.91619

返信ありがとうございます。
私も権限の問題かと思いましたが、zipはAppdata下のtempフォルダに生成されており、使用しているのは非常駐型ウイルス対策ソフト、その上エラーが起きているのはbcopy側でした.....
.
そして不思議なのが、existのstatが何をやっても0から変わらないことです.....



TOMATO

リンク

2020/10/14(Wed) 19:18:45|NO.91621

ここに書き込むのも迷いましたが、fxcopyの不具合を回避するモジュールを置いておきます。
まぁ、直接CopyFileAPIを実行したほうが良い気もしますが…


#include "hspext.as" #module #undef fxcopy@ #uselib "hspext.dll" #cfunc __fxcopy "_fxcopy@16" str,var,int,int #define global fxcopy(%1,%2,%3=0) _fxcopy %1,%2,%3 #deffunc _fxcopy str p1, str dest, int p2 sdim _dest, strlen(p1) + strlen(dest) + 2 _dest = dest return __fxcopy(p1, _dest, p2) #global a = "test.txt" fxcopy a, "C:\\Temp\\" mes stat



Creeper

リンク

2020/10/15(Thu) 17:59:08|NO.91628

皆様の環境でTempフォルダーからファイルをコピーするプログラムは動きますでしょうか?
お時間ありましたら一度お試しいただきたいです......



TOMATO

リンク

2020/10/16(Fri) 10:48:00|NO.91629

>皆様の環境でTempフォルダーからファイルをコピーするプログラムは動きますでしょうか?

No.91618 のスクリプトですよね?
私の環境では問題なく動いてます。



Creeper

リンク

2020/10/16(Fri) 23:47:30|NO.91634

すみません、私の環境に問題があったようで再インストールをしたところ、
MillkeyStarsさんのスクリプトはうまく実行できました、
(相変わらず私のはうまく動きませんでしたが......)
とてもご迷惑をおかけした上、最後は自分の環境問題で申し訳ないです.....
本当にありがとうございました!



TOMATO

リンク

2020/10/17(Sat) 00:24:11|NO.91635

解決済みですが…

>(相変わらず私のはうまく動きませんでしたが......)

fxcopy自体にバグがあるのに加えて、第一引数はファイル名だけにしないといけないようです。
(フルパスにしてはいけない謎仕様…)


#include "hspext.as" #include "zipfile.as" #module #undef fxcopy@ #uselib "hspext.dll" #cfunc __fxcopy "_fxcopy@16" str,var,int,int #define global fxcopy(%1,%2,%3=0) _fxcopy %1,%2,%3 #deffunc _fxcopy str p1, str dest, int p2 sdim _dest, strlen(p1) + strlen(dest) + 2 _dest = dest return __fxcopy(p1, _dest, p2) #global dirtemp="" fxdir dirtemp, -2 date0=gettime(0) date1=gettime(1) date2=gettime(3) name = "Ver.0.1-Date."+date0+date1+date2+".zip" fname = dirtemp + name s1 = dir_exe+"\\*.*" ZipCompress s1, fname if stat : dialog "zip圧縮に失敗しました" mes "圧縮元パス:"+s1 mes fname+"を保存しました。" copyback=dir_exe+"\\backup\\" mes fname+"\n"+copyback chdir dirtemp fxcopy name, copyback if stat : dialog "コピー目標のファイルがTempフォルダーから\n見つかりませんでした。" delete fname stop



MillkeyStars

リンク

2020/10/17(Sat) 08:44:20|NO.91636

絶対パスが原因だったのね・・・
知らなかった。TOMATO さん解決策ありがとう。



Creeper

リンク

2020/10/26(Mon) 17:22:21|NO.91690

時間が空いてしまいましたが、解決後も色々と考えてくださりありがとうございます!
MillkeyStarsさん、TOMATOさん、本当にありがとうございました!



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