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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0407
初心者ファイル・フォルダの保存名23未解決


初心者

リンク

2011/4/7(Thu) 18:03:33|NO.38203

HSPでコピー処理などを行うとき
存在確認をしてからファイルをコピーしたりすると思います
同じフォルダ名がある時は、上書き等をせず

例 test.exe
test(1).exe
test(2).exe

的な感じで保存出来るようにするにはどうすればいいのでしょうか?
サンプルのソースコードなどを提供してくれると有難いです



この記事に返信する


Cookies

リンク

2011/4/7(Thu) 18:08:30|NO.38204

ただ単純に、ファイル存在確認してからファイル名を「test(1).exe」、
それもあったら、「test(2).exe」に変更していけばいいじゃないですか。



backdrop

リンク

2011/4/7(Thu) 20:55:53|NO.38218

コードとしては

repeat if cnt == 0{ exist "test.exe" }else{ exist "test("+cnt+").exe" } if strsize == -1{ //保存。ファイル名に"test("+cnt+").exe"と指定 break //←これは絶対に抜かさないでください。抜かすと無限にコピー処理を繰り返すことになります } await loop



初心者

リンク

2011/4/8(Fri) 12:50:05|NO.38235

そのソースで色々試したのですが出来ませんでした;;

存在確認をしてあった場合は、bcopy命令+cntで試したのですが出来ませんでした



SYAM

リンク

2011/4/8(Fri) 13:00:40|NO.38236

はやく解決にたどりつくコツとして
「できなかった」「うまくいかない」「エラーになった」のような表現でなく、
「**と表示された」「何も表示されない」「**というエラーが出た」のような具体的な表現を心がけましょう。

そうすると回答者も状況を判断しやすくなり、
結果的に質問する側にとっても得です。

さもないと、回答者はなにが起きているのかつかめないままあやふやな回答をするしかなく、
結果的に質問する側にとって損です。



p、USAGI

リンク

2011/4/8(Fri) 13:00:40|NO.38237

「出来ませんでした」では分からないので、どんなソースを書いたのか
見せていただいた方がアドバイスできると思います。



p、USAGI

リンク

2011/4/8(Fri) 13:03:21|NO.38238

おっ!めずらしい。
SYAMさんと(ほぼ)同時送信だ。



初心者

リンク

2011/4/8(Fri) 18:03:48|NO.38241

repeat
if cnt == 0{
exist "test.exe"
}else{
bcopy "test.exe","test("+cnt+").exe"
}
if strsize == -1{
//保存。ファイル名に"test("+cnt+").exe"と指定
break //←これは絶対に抜かさないでください。抜かすと無限にコピー処理を繰り返すことになります
}
await
loop

皆さんご指摘ありがとうございます
これから心がけて生きたいと思います
本題ですが
単にbcopyなどにしただけなどです;;



Cookies

リンク

2011/4/8(Fri) 18:11:15|NO.38242

??保存したいのですか????

だとしたら、「//保存。ファイル名に"test("+cnt+").exe"と指定」とあるじゃないですか。
それは、「ここに保存する処理をかけ。」ということだと思われます。

あなたのスクリプトのように、existを消したのでは、重要なファイル存在判定が無くなってしまいます。



hexa.hemi

リンク

2011/4/8(Fri) 18:11:59|NO.38243

//保存。(略)
のコメントの行にbcopyをいれてください。



初心者

リンク

2011/4/8(Fri) 18:52:25|NO.38244

repeat
if cnt == 0{
exist "test.exe"
}else{
exist "test("+cnt+").exe"
}
if strsize == -1{
bcopy "test.exe","test(+cnt+).exe"
break
}
await
loop

上記のソースコードで出来るようになりました!!
ありがとうございます

ところで自分はこれを鯖アップロード時にも応用しようと思っています
先ほど試してみたのですが中々上手くいかず・・・

#include "hspinet.as"
upServer=""
upUser=""
upPass=""
upDir="/"
upfilen="test.exe"
upName="test.exe"
netinit
ftpopen upServer,upUser,upPass
ftpput upName,upfilen,0
ftpclose

上記のソースコードに応用する事は出来ないのでしょうか?
サンプルソースなどを貰えるととても嬉しいです;;
質問ばかりですいませんが回答よろしくお願いします



Cookies

リンク

2011/4/8(Fri) 19:42:51|NO.38250

一ついいですか?
repeat
if cnt == 0{
exist "test.exe"
}else{
exist "test("+cnt+").exe"
}
if strsize == -1{
bcopy "test.exe","test(+cnt+).exe"
break
}
await
loop
だと、test.exeがなかった時はエラーが起きると思います。(bcopy元のファイルがないため。)
そのチェックを前に行っておくとともに、if cnt==0の判定は消してよいと思います。

では、初心者さんの質問に答えましょう。
repeat〜loopの間で、breakする直前のところでcntを変数に退避させるようにし、
あとで、upFilenとupName"にtest(+ [cntを退避させた変数] +).exe"を設定してやればいいでしょう。



Cookies

リンク

2011/4/8(Fri) 19:44:06|NO.38251

連レスすいません。
>そのチェックを前に行っておくとともに、if cnt==0の判定は消してよいと思います。
但し、cntを1から始める必要があります。



初心者

リンク

2011/4/8(Fri) 23:40:12|NO.38258

理解能力と知識不足で何度も質問してすいません

[cntを退避させた変数]

とは、何なんでしょうか?



Cookies

リンク

2011/4/9(Sat) 13:41:20|NO.38269

その文の一つ上にそれについて書いてあります。
>repeat〜loopの間で、breakする直前のところでcntを変数に退避させるようにし、
です。

新しく自分で変数作って、そこに退避させろ!ということです。



p、USAGI

リンク

2011/4/9(Sat) 15:24:11|NO.38270

つまり、こういうこと。
count=cnt
そして、
upFilenとupNameに"test("+count+").exe"を設定する。



初心者

リンク

2011/4/10(Sun) 13:43:44|NO.38286

自分でも色々試してみたのですがこの結果ですOrz..
中々うまくいきません

#include "hspinet.as"
repeat
upServer=""
upUser=""
upPass=""
upDir="/"
break
upfilen="test(+count+).exe"
upName="test(+count+).exe"
netinit
ftpopen upServer,upUser,upPass
ftpput upName,upfilen,0
ftpclose
await
loop

上記のソースにしたら鯖事態にUPされなくなりました。。



Last Samui

リンク

2011/4/10(Sun) 15:25:58|NO.38288

全部は分からないので、一言だけ。
repeat命令ではcntを使うといちいち変数を設定しなくていいけど、初めcnt=0でcnt+=1に決まっている。
名前は知らないけど、初期値や変動数を書かなくてすむ変数です。
変数をcountに変えたのなら、repeat前に初期値、loop前に変動数を書く必要があります。

repeat
処理
loop

count=1
repeat
処理
count+=1
loop

cntと違って面倒くさいですが、初期値も変動数も変えられます。
初期値がcount=100であっても、変動数がcount-=53であってもいいのです。
だからこそ、指定する必要があります。
あなたは指定していないので、countはずっと0のままです。



Cookies

リンク

2011/4/10(Sun) 15:55:02|NO.38291

ちゃんとその前にexistたちは書いてあるんですか?
なんか心配になってきました。それが全スクリプトとか言いませんよね?
しかもp、USAGIさんがちゃんと答えを書いてくださっているというのに
ダブルクォーテーションを二つ抜いちゃってます。



初心者

リンク

2011/4/10(Sun) 16:22:44|NO.38295

皆様回答ありがとうございます
>> Cookiesさん
いえ、これが全スクリプトです
exist命令を使わないといけないのですか!?
鯖上のファイルを操作するにはexistはどのように使えばよろしいのでしょうか・・・



Cookies

リンク

2011/4/10(Sun) 17:01:16|NO.38299

existって確かに自パソコン上のファイル存在確認なんですよね。
鯖上なら、ftpdirlistとftpdirlist2とかを使ってください。

今回たまたま、蔵にも鯖のフォルダ構成が再現できてただけですから。



初心者

リンク

2011/4/10(Sun) 17:04:00|NO.38300

>> Cookiesさん
すいません。ありがとうございました
あやうく気づかないままでいるところでした・・・

#include "hspinet.as"

repeat
if cnt == 0{
exist "test.txt"
}else{
exist "test("+cnt+").txt"
}
if strsize == -1 {

upServer=""
upUser=""
upPass=""
upDir="/"
upfilen="C:\\test.txt"
upName="test("+cnt+").txt"
netinit
ftpopen upServer,upUser,upPass
ftpput upName,upfilen,0
ftpclose

break
}
await
loop

本題ですが、上記のソースで鯖上にtest(0).txtでUPする事が出来ました
ですがそれ以降test(0).txtに上書きされてしまいます・・・
test(0).txt
test(1).txt
test(2).txt
test(3).txt
test(4).txt
見たいな感じで鯖にUPしたいのですが中々うまくいきません・・・



初心者

リンク

2011/4/10(Sun) 19:27:33|NO.38311

ftpdirlistとftpdirlist2で色々ぐぐってみたのですが、、
存在確認の方法が分かりませんでした・・・



Cookies

リンク

2011/4/10(Sun) 19:33:15|NO.38312

いやぁ、ググるよりHDLる方がいいかと。
HSP Document Libraryの方がヒットしますよ。
スクリプトエディタでF1キー。
で、「ftpdirlist」でHDLるとヘルプ出てきてサンプル逆引きのとこにtest5.hspがありますよね?
それを参考にすればできると思います。



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