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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0516
YSRexist命令で確認してもdelete命令でエラーが出ることがある(白目)11解決


YSR

リンク

2013/5/16(Thu) 14:07:16|NO.54071

ヘルプによると、
>指定したファイルが存在しないか、書式が間違っている場合はエラー12(「ファイルが見つからないか無効な名前です」)となります。
>delete命令を実行する前に exist命令でファイルの有無を確認するようにしてください。
としっかり書いているのにも関わらず、


exist "result.txt" if strsize!-1 :delete "result.txt"

こんなコードで、
---------------------------
Error
---------------------------
#Error 12 in line ??? (????.hsp)
-->ファイルが見つからないか無効な名前です

---------------------------
OK
---------------------------
と出てくることがある(行数とファイル名は伏せた)。どうせえっちゅうねん。
(元は巨大なコードの一部なので晒せない。どう考えてもexistがポカしているとしか……)



この記事に返信する


KA

リンク

2013/5/16(Thu) 14:21:43|NO.54073

そのスクリプトだけで、試して見てはどうでしょうか。



 

リンク

2013/5/16(Thu) 14:30:04|NO.54074

パックファイルにはあるけどフォルダにはない場合そうなりました。(例えばstart.ax)



名無し

リンク

2013/5/16(Thu) 14:34:11|NO.54075

その2行だけを実行したところ、問題ありませんでした。

元のソースに組み込んだ時、deleteの直前にexistを使っているにも関わらずエラーが発生するとしたら・・・私には原因がわかりません;



ht.

リンク

2013/5/16(Thu) 16:37:46|NO.54076

existおよびdeleteを絶対パスで指定しておきエラーが起きた時点のデバッグウインドウを確認してみてはどうでしょうか。



てれてれ

リンク

2013/5/16(Thu) 21:09:09|NO.54079

別のソフトウェア等で使用中のファイルを削除してたとか?
そのファイルってのはWindowsのExplorerからは削除出来るの?



YSR

リンク

2013/5/16(Thu) 22:05:16|NO.54080

>NO.54074
ノンノン。別のexeと連携して、データを受け渡しする時にこの問題が出てきたのよ

>A.exeでB.exeをexec命令で呼び出す→B.exeがresult.txtを出力→
>A.exeがresult.txtの存在を感知してnoteload命令で読み込み→result.txtを削除

といった流れでコード組んでたら、削除する部分でError12が出てくることがたまにあってね。
(特に、↑の流れをループ内で連続しているとありがち)
恐らく、ファイルをdeleteしている間にexistすると、
無いものをある(orあるものを無い)として判定するんじゃないかと。まあ今回は、

>A.exeでB.exeをpipeexec命令で呼び出す→B.exeが演算結果を標準出力→
>A.exeが標準出力を受け取って処理

として乗り切ったが、面妖な話だ……
(ワザとウェイトを入れてみる手まで使ったが効果なし)



test

リンク

2013/5/16(Thu) 22:26:39|NO.54081

NO.54079さんの言う通り、他のプロセスで使用中のファイルを削除しようとすると質問と同じ状況が発生しました。

B.exeからの書き込みが終わっていない状態でA.exeがファイルを削除しようとしたのかもしれません。

だとすると、A.exeがロックファイルを作成したあとにB.exeを呼び出し、B.exeはresult.txtの書き込みが終了してからロックファイルを削除、A.exeからはロックファイルを監視して削除されたらresult.txtを読んで削除するようにすると改善するかもしれません。

しかしパイプを使うのがもっといい解決策ですね。

あと、エラーを起こしたのがコンパイル後のexeファイルの場合は、エラー表示は「ファイルが見つからないか無効な名前です」ではなく「内部エラーが発生しました」になります。



KA

リンク

2013/5/16(Thu) 23:15:55|NO.54083

>>A.exeでB.exeをexec命令で呼び出す
それを最初に書けば良かったのに・・・。

OS側のファイル処理やキャッシュの関係も有るかもしれません。



名無し

リンク

2013/5/17(Fri) 09:35:02|NO.54084

共有メモリを使ってみては



YSR

リンク

2013/5/18(Sat) 19:41:44|NO.54118

ロックファイルというのはなかなか良い手。
パイプが使えない時には使ってみようかと思う。



てれてれ

リンク

2013/5/18(Sat) 20:23:51|NO.54122

というか「ひとりごと」ならまだしも「質問」のカテゴリでスレッド立てる以上「教えてもらう」側な訳だろ。
なんでそんなに上から目線でいられるのか理解出来ない。

解決にするんならお礼の一言ぐらい言ったらどうよ。



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