exist命令で確認してもdelete命令でエラーが出ることがある(白目)
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
というか「ひとりごと」ならまだしも「質問」のカテゴリでスレッド立てる以上「教えてもらう」側な訳だろ。
なんでそんなに上から目線でいられるのか理解出来ない。
解決にするんならお礼の一言ぐらい言ったらどうよ。