- 締切済み
ネットワーク上でのファイル操作(VB6)
Private Sub AllKisyuChangeAnswer() '設定完了手続き Dim Path As String Dim Num As Integer Num = 1 Path = "\\70F\c\検査\pdata\KisyuAns" & Num & ".txt" '設定完了確認ファイル(メインPC)へ結果書込み Open Path For Output As #52 Print #52, 1 Close #52 End Sub VB6.0sp6を使用しております。 PC6台のみのネットワーク上での動作なのですが、PC1~5からほぼ同じタイミングで上記サブルーチンを実行し、"KisyuAns" & Num& ".txt"というファイル名でPC6(マシン名は\\70F)へデータ(1)を書込みにいこうとしているのですが、Open Path For Output As #52のところでエラーが発生します(発生しない場合もあります)。 ほとんどの場合、PC1~5のうち2台で同じエラーが発生し、何かしらのバッティングが起こっているようにも思います。 ただ、デバッグモードでは、エラー部分でStopするので、そこから再度実行すると何事もなかったようにファイル書込み操作が完了します。書込むファイルは"KisyuAns" & Num & ".txt"で、PC1~5により、Numを1~5に変えて別名のファイルに書き込むようにしています。 書込みのタイミングをPC1~5で遅らせる方法も考えましたが、上記サブルーチンをPC1~5が実行するタイミングがわずかですが、一定ではありませんので難しいかと思います。また、PC6台全ての書込み操作完了までの時間もあまり与えられておりません(0.5Sec以下) その他の情報としてですが、 ・PC6のCドライブのみ共有化しています。 ・PC1~6全てファイヤウォールを無効にしています。 ・KisyuAns" & Num & ".txt" は、PC1~5による書込みが行われる直前(1secほど前)に、PC6により全て0が書き込まれています。 ・エラーの内容は「実行時エラー"52" パスまたはファイル番号が不正です。」 エラーを回避する方法分かりません。長文で申し訳ありませんが、どなたかご回答のほどよろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- temtecomai2
- ベストアンサー率61% (656/1071)
PC6 と PC1~5 がそれぞれ同じテキストファイルを突っつき合ってるんですよね。(突っつきあうタイミングがずれている事を開発者は期待している) 切り分けのため、 とりあえず PC6 を動かさず、PC1~5 だけで実行してみてはどうでしょうか? PC1~5 はサーバ上の同じフォルダにある別々のファイルを突っついてるんですよね。 次に PC6 と PC1 だけ。さらに PC6 と PC2 だけ。。。。 てな感じで。 実際のところホントに PC6 と PC1~5 は(ファイルが置かれているサーバから見て)「開く→書き込む→閉じる」 の一連セットでタイミングが被ってないんでしょうかね・・・ PC6 がファイルを閉じた後、ファイルのロックが解除されるまでの時間はファイルが置いてあるサーバの守備領域だと思うし。
- tysdtyhsdy
- ベストアンサー率23% (8/34)
0を書き込むタイミングではないのでしょうか?
お礼
ご回答ありがとうございます。 もっと詳しく申しますと、実はPC6は別装置からの外部信号をトリガを受け取り、別装置内のデータをRS232Cで読み込み、PC1~5用のデータ(中身は1~20の数値データのみ)ファイルを生成し、続けて全ての"KisyuAns" & Num & ".txt"に0を書き込んでいます。別装置からのPC6への外部信号トリガの1Sec後に別装置からPC1~5へトリガを出力してもらっています。そのトリガでPC1~5がデータファイルを読み込み、そのデータに従った操作を行ったあと、"KisyuAns" & Num & ".txt"に1を書込みにいく動きです。(その後PC6が"KisyuAns" & Num & ".txt"の1or0を読み込み、別装置へRS232Cで書込みにいきます) PCの起動直後(朝一番)にこのようなエラーが見られ、以降、PCを再起動しない限り、ほとんど発生することはありません。 別装置側担当者により1Secを2Secに延長してもらいましたが変わりませんでした。色々とタイミングを変えてみたのですが、同様で、ただ、PC側をエラー停止しないようにステートメント(Resumeなど)を加えておき、装置側からのリトライにより(初めの1回+2回)思ったとおりの動作をします。なぜ3回必要なのかはわかりませんが。。。。