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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1020
ぱっちードライブCの中にあるJpeg画像をUSB(Z)にコピーする方法11解決


ぱっちー

リンク

2010/10/20(Wed) 19:01:15|NO.35424

HSP超初心者(2日目)ですが題名のようにドライブCの中にあるJpeg画像をUSB(Z)
にコピーすることをしようと思ってます。
いろいろな方が公開しているのを参考に一応下記を書いてみたのですが何故か
マイドキュメントの直下のJpegしか拾ってくれません。
どのようにすれば宜しいでしょうか?

もし、ドライブCという指定に無理があるならマイドキュメントの中のサブフォルダ
も含めてJpeg検索というのでも良いのですが・・・・お力をお貸しください。

#include "hspext.as"
sdim filelist, 512
sdim filaname, 256
dir = "C:"
chdir "C:"
dirlist2h 1,0
dirlist2 filename,"*.jpg", 0, '\\'
dirlist2r filelist

mes dir+"ドライブ以下のJpegファイルの一覧"
mes filelist ;ファイルリストの表示

i = 0
repeat
; ファイル1行分を取り出し
getstr filename, filelist, i
if strsize = 0 : break
i + strsize
bcopy "C:"+filename, "Z:/"+filename
loop

mes "完了"



この記事に返信する


SYAM

リンク

2010/10/20(Wed) 19:43:08|NO.35426

"C:"だけだと、カレントドライブの変更しかしていないことになります。
カレントフォルダがルートフォルダになるように変更したいなら、ルートフォルダのパス文字列も指定しないといけません。


chdir "C:\\" dirlist2h 1,0 dirlist2 listsize,"*.jpg", 0, '\\' sdim filelist, listsize dirlist2r filelist mes dir_cur+"ドライブ以下のJpegファイルの一覧" mesbox filelist, ginfo_winx, ginfo_winy-16

これだとルートフォルダにあるものを検索します。
また、表示はmes命令だとハミ出るので、mesboxにしておくのが便利です。

ルート配下のサブフォルダも全部調べるなら dirlist2 命令のパラメータを変更すればできますが、ルート配下だと恐ろしく時間がかかるうえ、ヘタするとでかくなりすぎてクラッシュします。
特定のフォルダ以下にしておくのが無難でしょう。



ぱっちー

リンク

2010/10/21(Thu) 01:24:13|NO.35431

SYAMさん
ありがとうございます。
考えてみたらたしかにCドライブ全部ですと凄いことになりそうなのでご指摘いただいた
ようにDocuments and Settings以下にしました。
で、下記にしてみたのですが・・・bcopyが出来なくなってしまいました。
おそらく非常に簡単なミスをしてると思うのですがかれこれ4時間ほどいろいろやって
も「ファイルが見つからないか無効な名前です。」と出てきてしまうのですが
何をどう直せばよいのでしょうか?
なにとぞよろしくお願いします。


#include "hspext.as"
dir="C:\\Documents and Settings\\" chdir dir dirlist2h 1,0 dirlist2 listsize,"*.jpg",1,'\\' sdim filelist, listsize dirlist2r filelist mes dir + "ドライブ以下のJpegファイルの一覧" mesbox filelist, ginfo_winx, ginfo_winy-16 i = 0 repeat getstr listsize, filelist, i if strsize = 0 : break i + strsize bcopy dir+listsize, "Z:/"+listsize loop mes "完了"



ANTARES

リンク

2010/10/21(Thu) 02:00:54|NO.35432

>「ファイルが見つからないか無効な名前です。」と出てきてしまうのですが
 bcopyにフォルダを作る機能はないので……



ANTARES

リンク

2010/10/21(Thu) 03:35:39|NO.35433

 指定したパスの、存在しないディレクトリを作成する命令を作りました。
 「ディレクトリの区切りに『/』を使うことはできません。」とありますが、
今回は「/」を無視しても問題ないので例外的に使えます。

#module ;tmkdir 存在しないディレクトリをすべて作る ;書式:tmkdir path, sw ;path:ディレクトリを作りたいパスを指定します ;sw :pathがファイルのとき0を、ディレクトリのとき1を指定します ; pathの各ディレクトリが存在するか調べて、存在しない場合は ; 作ります。 ; ディレクトリの区切りに「/」を使うことはできません。 #deffunc tmkdir str p1, int sw file=p1 len=strlen(file) sdim dir,260 p=0 repeat getstr s,file,p,'\\': p+=strsize if sw==0: if p>=len: break dir+=s dirlist dummy,dir,5: if stat<1: mkdir dir if sw: if p>=len: break dir+="\\" loop return #global s="C:\\antares\\!work\\test\\test2\\test3" tmkdir s,1 end



ぱっちー

リンク

2010/10/21(Thu) 13:34:34|NO.35434

ANTARESさん>返信ありがとうございます。


> bcopyにフォルダを作る機能はないので……
との事ですがZ直下にファイルをコピーする予定なのですが下のですと何か問題が
起るのでしょうか?

bcopy dir+listsize, "Z:\\"+listsize

しかし、bcopyがどうしても上手くできません。 いろいろやってみるとどうやらC:\Documents and Settings 直下にしかファイルがない 場合はちゃんとコピーできるのですがサブフォルダにファイルを置くとどうしても 駄目になってしまいます。(dirlistですとちゃんと動作しましたが、dirlist2にすると エラーが起きました。) 恐らくはdir+listsizeというファイル名の指定がまちがっているのだろうと思うのですが フォルダが多重化している場合のファイル名はどのように書けばよいのでしょうか? また、もしくはdirlist2のパラメータ設定を私が間違ってるのでしょうか?



SYAM

リンク

2010/10/21(Thu) 14:07:07|NO.35435

listsize 変数を、ファイル名をひとつ読み出す先として使いまわしてるようですが、こういった使い回しはバグの元になることが多いので別途文字列変数を作ってそこに読み出すことをオススメしておきます。

で、
>Z直下にファイルをコピー
しているかどうか確かめましょう。
取り出したファイル名がどんな文字列になっているか確認してみてください。

で、間違ってると思ったら getpath命令のヘルプを参照しましょう。



ANTARES

リンク

2010/10/21(Thu) 23:42:52|NO.35447

>との事ですがZ直下にファイルをコピーする予定なのですが
>下のですと何か問題が起るのでしょうか?
 bcopyの前に
dialog "コピー先=Z:\\"+listsize,2: if stat==7: end
と書いて実行し、考えてみましょう。



ぱっちー

リンク

2010/10/23(Sat) 01:55:20|NO.35472

ANTARESさん> アドバイスありがとうございます。が・・・未だ解決せずです。

アドバイスを頂いてdialog命令を見てみたら恐らくディレクリ情報まで変数(filename)
にいれてしまっていたのだと思いこれもまたSYAMさんにアドバイスいただいたgetpath
命令のヘルプをみていてnamae=getpath(filename,8)をループ内にいれてみました。
が、やはりbcopyができません。
bcopyのディレクトリ指定の書き方が間違ってると思い色々ためしましたが
どうにも上手くいきません。
大変御手数ですが皆様もう少しヒントをいただけないでしょうか?


#include "hspext.as" dir = "C:\\Documents and Settings\\" chdir dir dirlist2h 1,0 dirlist2 filename,"*.jpg", 1, '\\' sdim filelist, filename dirlist2r filelist mes dir_cur+"ドライブ以下のJpegファイルの一覧" mesbox filelist, ginfo_winx, ginfo_winy-16 i = 0 repeat getstr filename, filelist, i if strsize = 0 : break i + strsize namae=getpath(filename,8) dialog "コピー先=Z:\\backup\\"+namae,2: if stat==7: end bcopy dir + namae, "Z:\\backup\\"+namae wait 10 loop mes "完了"




たんす

リンク

2010/10/23(Sat) 09:50:59|NO.35474

変数の内容を確認しましょう。
dir:コピー元基準フォルダ
filelist:基準フォルダ以下に存在するJPEGファイルの相対パスの一覧
filename:1件の相対パス
namae:ファイル名+拡張子


bcopy dir + namae, "Z:\\backup\\"+namae
これではサブフォルダにあるJPEGファイルが読み出せません。

対象ファイルのフルパスを指定する必要があるので

fullpath = "" + dir + "\\" + filename bcopy "" + fullpath , "Z:\\backup\\" + namae
で如何でしょうか。



ANTARES

リンク

2010/10/23(Sat) 23:26:59|NO.35484

 応用しましょう。
dialog "コピー元="+dir + namae+" コピー先=Z:\\backup\\"+namae,2: if stat==7: end



ぱっちー

リンク

2010/10/24(Sun) 21:15:44|NO.35491

たんすさん、ANTARESさん>

ありがとうございました。
取り合えず完成しました。が、いまいち理解しきってないのでこれから
勉強して理解できるようにいたします。



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