- ベストアンサー
ファイルを処理中に次の処理に移ってしまうようなのですが、、
VB.NETですが、 趣味でアプリケーションを作成しています。 下記のコードで処理を実行させています。 Call Shell("C:\aaa.exe c:\test.txt c:\test2.txt", AppWinStyle.Hide) (A) Dim sr As New System.IO.StreamReader("c:\test2.txt", System.Text.Encoding.Default) Dim sb As New System.Text.StringBuilder(CInt(Microsoft.VisualBasic.FileSystem.FileLen("c:\test2.txt") * 1.1)) 'ファイルの最後までループ Do Until sr.Peek = -1 sb.Append(sr.ReadLine & vbCrLf) Loop sr.Close() "aaa"はtest.txtを加工してtest2.txtとして出力するプログラムです。 その後、test2を最後まで読み出しているのですが、 どうもプログラムaaaが処理を終了する前に 次の読み出し処理に移ってしまっているようなのです。 そこで、素人なりに上記(A)の部分に For i = 0 To 2000000000 Next For i = 0 To 2000000000 Next とForループを加えて時間稼ぎしているのですが、 状況によって時間稼ぎがうまくいかない場合があります。どのように問題を回避すべきでしょうか? aaaはDLLでも組み込み可能になっているプログラム なのですがDLLで実行させると何らかのメリット があるのでしょうか? その点を教えていただけると助かります。 回答よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Dim hProc As System.Diagnostics.Process 'プロセス作成 hProc = System.Diagnostics.Process.Start("C:\aaa.exe c:\test.txt c:\test2.txt") 'プロセス終了待機 hProc.WaitForExit() hProc.Close() hProc.Dispose() Dim sr As New System.IO.StreamReader("c:\test2.txt", System.Text.Encoding.Default) Dim sb As New System.Text.StringBuilder(CInt(Microsoft.VisualBasic.FileSystem.FileLen("c:\test2.txt") * 1.1)) 'ファイルの最後までループ Do Until sr.Peek = -1 sb.Append(sr.ReadLine & vbCrLf) Loop sr.Close() これでどうでしょうか。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
shell関数の第3引数が省略されていると、終了を待ちません trueを指定すると終了を待つようになります。 呼び出したプログラムがハングアップする可能性がある場合には、第4引数でタイムアウト時間をミリ秒で指定することができます。(integerの範囲で)
お礼
回答ありがとうございます。 お返事遅れました。 第3引数があるとは思いませんでした。 動作確認したところうまくいきました。 ありがとうございます。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
お礼
回答ありがとうございます。 お返事遅れました。 #1さんの方法と同じ方法ですね。 プロセスの終了まで待機すればよいわけですね。 ありがとうございます。
- bin-chan
- ベストアンサー率33% (1403/4213)
VBはVer6までしか触ってないので、.NETでどうなるかは自信がありませんけど。 同期/非同期の問題ですね。 shellは、確かに結果を待たずに次行を実行します。 そのため、結果を待つ処理が必要になります。 このカテゴリで「同期」で検索してみてください。 下記、過去問の#2さんの回答が適用できそうに思います。
お礼
回答ありがとうございます。 お返事遅れました。 VB6の方法のように思いますが、、、、。 よくわかりませんでしたので、 動作確認してません。 でもありがとうございました。
お礼
回答ありがとうございます。 お返事遅れました。 プロセスの終了まで待機すればよいわけですね。 プログラムの動作確認ができました。 ありがとうございます。