

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で実行させると何らかのメリット
があるのでしょうか?
その点を教えていただけると助かります。
回答よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
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()
これでどうでしょうか。
回答ありがとうございます。
お返事遅れました。
プロセスの終了まで待機すればよいわけですね。
プログラムの動作確認ができました。
ありがとうございます。
No.4
- 回答日時:
shell関数の第3引数が省略されていると、終了を待ちません
trueを指定すると終了を待つようになります。
呼び出したプログラムがハングアップする可能性がある場合には、第4引数でタイムアウト時間をミリ秒で指定することができます。(integerの範囲で)
回答ありがとうございます。
お返事遅れました。
第3引数があるとは思いませんでした。
動作確認したところうまくいきました。
ありがとうございます。
No.3
- 回答日時:
回答ありがとうございます。
お返事遅れました。
#1さんの方法と同じ方法ですね。
プロセスの終了まで待機すればよいわけですね。
ありがとうございます。
No.2
- 回答日時:
VBはVer6までしか触ってないので、.NETでどうなるかは自信がありませんけど。
同期/非同期の問題ですね。
shellは、確かに結果を待たずに次行を実行します。
そのため、結果を待つ処理が必要になります。
このカテゴリで「同期」で検索してみてください。
下記、過去問の#2さんの回答が適用できそうに思います。
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=325703
回答ありがとうございます。
お返事遅れました。
VB6の方法のように思いますが、、、、。
よくわかりませんでしたので、
動作確認してません。
でもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
.txtではなく.logの方が良いの...
-
多数のサブディレクトリ内のフ...
-
psqlでエラーログをとりたい
-
テキストファイルで提出とは?
-
VBAでワークシートを引数として...
-
拡張子を元に戻す
-
renameコマンドについて
-
バッチファイル 複数ファイル...
-
テキスト(txt)→ワード(docx)へ...
-
forfilesで検索したファイルを...
-
unlinkで削除されないのは?
-
ExcelVBA テキストファイルUNIC...
-
ファイル内容の修正、行削除に...
-
フォルダを自動作成・移動を複...
-
ファイルを処理中に次の処理に...
-
PowerShellでのテキスト編集に...
-
NOTEPAD.EXEが見つかりません。
-
時刻をBATファイルにて24時間に...
-
ファイル名の一部をbatで変更し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
.txtではなく.logの方が良いの...
-
VBAでワークシートを引数として...
-
テキストファイルで提出とは?
-
多数のサブディレクトリ内のフ...
-
ファイル名の一部をbatで変更し...
-
ファイル内容の修正、行削除に...
-
拡張子を元に戻す
-
エクセルの各セルの内容をそれ...
-
psqlでエラーログをとりたい
-
ファイルの最後に文字列挿入
-
COPYコマンドで結合すると余計...
-
Windows マシンでFTPバッチが動...
-
バッチファイルで文字列削除に...
-
バッチファイル 複数ファイル...
-
UWSCでテキストファイルを開い...
-
ExcelVBA テキストファイルUNIC...
-
VBSでフォルダ内のテキストファ...
-
外部exeに対しての引数受け渡し
-
accessでSQL文を使ってcsvファ...
おすすめ情報