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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0515
308EWINAPI"SHFileOperation"について9解決


308E

リンク

2009/5/15(Fri) 19:08:04|NO.25151

WINAPIの"SHFileOperation"を使って、ファイルのコピーを行おうとしているものです。
例えば、変数filesには
C:\\〜test.txt
C:\\〜test.zip
C:\\〜テスト.rar
C:\\〜てすと.lzh
が代入されており、
folderには
C:\〜\\testfolder
が代入されているものとします。
そして、copyfoldersはSHFileOperationのモジュールを呼び出すものとします。
(中身は先輩方のサンプルをコピーしたものです。)

そこで、

repeat notemax noteget fname,cnt copyfolders fname,folder,2 loop
として、コピーを試みるのですが、
「ファイル をコピーできません。送り側のファイルまたはディスクから読み取れません。」
とエラーが出てしまいます。

ご教授お願いします。



この記事に返信する


check

リンク

2009/5/15(Fri) 19:25:51|NO.25154

copyfolders命令が何を行っているのがわからないので答えようがない。
モジュールなら、その部分のソースを載せてみろ。



308E

リンク

2009/5/15(Fri) 20:23:58|NO.25155


#uselib "shell32" #func global SHFileOperation "SHFileOperation" sptr #module #deffunc copyfolders str FromFolder,str ToFolder,int mode From= FromFolder : To= ToFolder SHFILEOPSTRUCT = hwnd, mode, varptr.From, varptr.To, $150, -1, 0, 0 SHFileOperation varptr.SHFILEOPSTRUCT return #global
です。



KA

リンク

2009/5/16(Sat) 00:42:36|NO.25158

まず、どこが問題なのかを自分で考えましょう。

下記では、問題なくコピーできました。


fname="d:\\_1\\a.txt" folder="d:\\_2" copyfolders fname,folder,2



308E

リンク

2009/5/16(Sat) 15:04:04|NO.25169

ファイルがひとつならば、コピー可能なのですが、
複数となってくると、できなくなってしまいます。



hatter

リンク

2009/5/16(Sat) 17:24:09|NO.25174

1.なぜWINAPIでなければならないのですか?
2.どこで変数filesを使用しているのですか?
3.また、note〜系の命令は大半がnotesel命令が必要で
notegetもその通りなのに、あなたのスクリプトにはない。なぜですか?
4.変数folderとはなに?
>以上がスクリプトを見た限りの感想;疑問。

あなたのエラーメッセージを見る限りファイル名の指定が間違っている気がします。
実行中のエラーでしょうから、Debug Windowの変数タグからきちんと
copyfolders fname,folder,2
時に fname と folder に 予想された文字列が入っているか確認する。



308E

リンク

2009/5/16(Sat) 18:35:47|NO.25180

1.fxcopyですと、正常にコピーできないためです。
2.dirlist2r filesとして使用しています。
3.申し訳ございません。入力漏れです。こちらの方では、記述してあります。[notesel files]
4.コピー先フォルダ名です。

Debug Windowの変数タグにて確認しましたが、双方正常に代入されていました。



ANTARES

リンク

2009/5/17(Sun) 04:02:59|NO.25201

 SHFILEOPSTRUCTのpfromとpToが指すバッファの最後にはターミネータが2つ必要です。

 随分面倒なものを使っているので、複数一度にコピーしようとしているのかと思ったら、
1個ずつですね。何でCopyFileを使わないのでしょう?

>1.fxcopyですと、正常にコピーできないためです。
 コピー元はカレントディレクトリで、ファイル名のみ指定するようです。

 bcopyは?



ANTARES

リンク

2009/5/17(Sun) 04:13:56|NO.25203

fxcopyのヘルプ修正提案
【修正前】
p1で、コピー元のファイル名をあらかじめ格納してある変数名を指定します。
【修正後】
p1で、コピー元のファイル名をあらかじめ格納してある変数名を指定します。
事前にchdirでコピー元ディレクトリを指定しておいてください。



308E

リンク

2009/5/17(Sun) 08:54:49|NO.25208

CopyFileの存在を忘れておりました。
最初の方に試したのですが、どうもうまくいかないので、それ以降触れていなかったのです。

CopyFileで正常に動作することを確認しました。
bcopyを使わなかったのは、タイムスタンプが変更されるらしいからです。

回答してくださった、checkさん、KAさん、hatterさん、ANTARESさん
本当にありがとうございました。



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