こんにちは.
現在VBで課題(研究?)をやっているのですが,
1.VisualBasicのOpenステートメントを使用してテキストファイルを作成し,
  そこに書き込みをする
2.友達が作成したEXEをを呼び出す.
  EXEでは,1で作成したテキストファイルに書かれたものを使用する
ということをしたいのですが,
Closeステートメントを使用して直後に2の動作に入るのですが
そうするとファイルがありませとエラーがでてしまいます.
でも,Closeステートメントでブレークポイントを置き,
フォルダ内を見るとテキストファイルが存在していて,
F5を押すとちゃんとEXEが起動するんです.

以上のエラーをなくすために
For文でまわし,
ファイルの存在の有無を調べ,
ファイルの存在が確認された時点でFor文をBreakし,
Exeを呼び出すという流れにしたいと思っています.

しかし,ヘルプを見てもファイルの存在の有無を調べるステートメントや
関数が見つかりません.
どうか助けてください.

A 回答 (1件)

ファイルの存在の有無を調べる関数は「DIR」を使います。


使い方はヘルプをみればのっています。

この回答への補足

できました!!
ありがとうございました!!

補足日時:2002/02/10 23:14
    • good
    • 0
この回答へのお礼

早々と回答ありがとうございます!!
早速ヘルプを見て研究したいと思います!
ありがとうございました!

お礼日時:2002/02/10 22:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q使用しているEXEファイルから、別のEXEファイルをクローズする方法

今現在簡単なプログラムを作成しておりまして、
TEST1.exeとTEST2.exeの二つのプログラムがあります。

TEST1.exeとTEST2.exeの二つのアプリケーションを起動
し、TEST1.exeが終了したら、TEST2.exeのアプリケー
ションも自動的に終了するようにしたいのですけど、何か
やり方ってありますでしょうか?

作成しているソフトはVB6.0/Win2000Proです。

よろしくお願いします。

Aベストアンサー

 CreateProcessプロセスというAPIで起動し
 TerminateProcessプロセスというAPIで終了させます

 以下に例を上げておきます。


'CreateProcess
'新しいプロセスを作り、実行ファイルを実行する。
'
'BOOL CreateProcess( LPCTSTR lpApplicationName,
' // pointer to name of executable module
'
' LPTSTR lpCommandLine,
' // pointer to command line string
'
' LPSECURITY_ATTRIBUTES lpProcessAttributes,
' // pointer to process security attributes
'
' LPSECURITY_ATTRIBUTES lpThreadAttributes,
' // pointer to thread security attributes
'
' BOOL bInheritHandles,
' // handle inheritance flag
'
' DWORD dwCreationFlags,
' // creation flags
'
' LPVOID lpEnvironment,
' // pointer to new environment block
'
' LPCTSTR lpCurrentDirectory,
' // pointer to current directory name
'
' LPSTARTUPINFO lpStartupInfo,
' // pointer to STARTUPINFO
'
' LPPROCESS_INFORMATION lpProcessInformation
' // pointer to PROCESS_INFORMATION
'
' );
'

Private Type PROCESS_INFORMATION

hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long

End Type

Private Type STARTUPINFO

cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long

End Type

Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal _
lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long


Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwAccess As Long, ByVal fInherit As Integer, ByVal hObject _
As Long) As Long

Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long


Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long


Const SYNCHRONIZE = 1048576
Const NORMAL_PRIORITY_CLASS = &H20&

Dim pInfo As PROCESS_INFORMATION
Dim sInfo As STARTUPINFO
Dim sNull As String


Private Sub Command1_Click()
Dim success&
success& = CreateProcess(sNull, "Calc.exe", ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo)

End Sub

Private Sub Command2_Click()
Dim ret&
ret& = TerminateProcess(pInfo.hProcess, 0&)
ret& = CloseHandle(pInfo.hThread)
ret& = CloseHandle(pInfo.hProcess)

End Sub

 CreateProcessプロセスというAPIで起動し
 TerminateProcessプロセスというAPIで終了させます

 以下に例を上げておきます。


'CreateProcess
'新しいプロセスを作り、実行ファイルを実行する。
'
'BOOL CreateProcess( LPCTSTR lpApplicationName,
' // pointer to name of executable module
'
' LPTSTR lpCommandLine,
' // pointer to command line string
'
' LPSECURITY_ATTRIBUTES lpProcessAttributes,
' // pointer to process security attributes
'
' LPSEC...続きを読む

QFor ステートメントについて

Dim t As Byte
と宣言をした上で
次のコードを書くと

For t = 1 To 10 Step 1
Next t

通常に実行されます。ところが、

For t = 10 To 1 Step -1
Next t

とするとオーバーフローします。
Dim t As Integer
とすると上手くいくことから t が負の数に対応していないからだと思いますが、t が負の数になることはありません。これはなぜなのでしょうか?

Aベストアンサー

例えばFor文の次にDebug.Print tとか書いて実行させてもイミディエイトウィンドウには何も表示されません。ループには入っていないのです。またエラーで止まった状態でtの値を見ると直前の値(セットしていなければ0)のままです。要するにtは関係ないんです。
では何がオーバーフローしているのかと言えば、Step -1の-1です。これはあくまでも推測ですが、ループ変数(t)がByte型なのでStep値をByte型で扱おうとしてエラーになっているのでしょう。
通常の演算(代入文とか)では、自動的に型変換が行なわれるので、Byte型であっても例えばt-1.5なんて演算もできてしまいます(イミディエイトウィンドウで試してみて下さい)。もちろんこれをt=t-1.5のようにByte型に代入しようとすれば、型変換により小数部は丸められ(精度落ち)、さらに整数部がByteの範囲外であればエラーになります。
ループでこのような型変換を毎回行なっていては当然実行速度が遅くなってしまいます。なのでStep値をあらかじめループ変数の型に合わせておき、演算を高速化しようとしているのでしょう。で、-1をByte型にしようとしてエラーを起こしていると。
ま、あくまでも推測ですので念のため(^^;

例えばFor文の次にDebug.Print tとか書いて実行させてもイミディエイトウィンドウには何も表示されません。ループには入っていないのです。またエラーで止まった状態でtの値を見ると直前の値(セットしていなければ0)のままです。要するにtは関係ないんです。
では何がオーバーフローしているのかと言えば、Step -1の-1です。これはあくまでも推測ですが、ループ変数(t)がByte型なのでStep値をByte型で扱おうとしてエラーになっているのでしょう。
通常の演算(代入文とか)では、自動的に型変換が行なわれるので、...続きを読む

QEXEでのENDステートメント動作

VB6.0(SP5)を使用しています。OSはXp Proです。
自作アプリのEXEでの動作で困っています。ENDステートメントが正常に機能しません。

MDIフォームで、メインフォームのLoad中、何らかのエラー(DLLの初期化失敗など)が発生した場合に、ENDステートメントでアプリケーションを終了させています。
VBでデバッグさせている状態だと問題無く終了します。
しかし、コンパイル後のEXEで動作させると必ずメインMDIフォームを表示(起動?)します。
この時に起動されるメインMDIフォームは、各種メニュー等は起動不可で、右上×印の終了ボタンのみ機能します。

ToolBarコントロールを使用しているか否かで、症状が変わります。
(1)MDIフォームにToolBarコントロールを組み込んだ状態
 上記、MDIフォームが表示される現象が発生します。
(2)MDIフォームにToolBarコントロールを組み込んでいない状態
 正常に終了します。
ToolBarコントロールのプロパティを何か変更する必要があるのでしょうか?

自作アプリだけの問題かとも思い、下記のような単純サンプルを作成して確認しましたが、EXEで動作させるとやはり同様の症状が発生します。

-------------------------------------------------
Private Sub MDIForm_Load()
End  '何もせずに終了する筈。
End Sub
-------------------------------------------------

ENDステートメントの直前で、何か実行する必要があるのかと思い、下記のようにも試してみました。

1)ToolBarを非表示にする。
Toolbar1.Visible = False 又は Set ToolBar1 = Nothing
END  '何もせずに終了する筈。
結果:ツールバーが非表示になるだけで、メインMDIフォームは表示されます。

2)メインMDIフォームを無効にする。
MDIForm1.Enabled = False
END  '何もせずに終了する筈。
結果:我ながらマヌケですが、メインMDIフォームが表示され、尚かつ×印すらクリック不可でした。

3)メインMDIフォームを非表示にする。
MDIForm1.Visible = False
END  '何もせずに終了する筈。
結果:MDIフォームが非表示となり、一見、よさそうですが、タスクマネージャで確認すると、該当アプリのタスクは終了はしていませんでした。

その他、ENDの代わりに、STOPを使用してみました。
この場合は、STOP実行時に「STOPステートメントで中断しました」とのメッセージが表示され、OKボタンで、やはりメインMDIフォームが表示されます。

どなたか、MDIフォーム+ToolBarコントロールを組み込んだ状態で、正常にENDステートメントを動作させる方法を教えてください。(EXEでの動作です。)

また、VBでデバッグさせている状態だと問題無く終了するのは何故なのでしょうか?。
よろしくお願いします。

VB6.0(SP5)を使用しています。OSはXp Proです。
自作アプリのEXEでの動作で困っています。ENDステートメントが正常に機能しません。

MDIフォームで、メインフォームのLoad中、何らかのエラー(DLLの初期化失敗など)が発生した場合に、ENDステートメントでアプリケーションを終了させています。
VBでデバッグさせている状態だと問題無く終了します。
しかし、コンパイル後のEXEで動作させると必ずメインMDIフォームを表示(起動?)します。
この時に起動されるメインMDIフォームは、各種メニュー等は起動不可で...続きを読む

Aベストアンサー

Initializeイベントで
Me.TooBar1.Enabled = False
を実行しておきます

こうしておけば MDIフォームのLoadイベントでEndステートメントも実行されるようです

ツールバーの初期化が関係しているのかもしれませんね

Qビルドした.exeファイルは.NET Frameworkが必要?

今日、vb 2005 express editionをインストールして、書店から入門書を購入し、簡単なプログラムを作成しました。
実行ファイル(.exe)を作成したのですが、入門書には「.NET Frameworkがインストールされていれば実行できます」と書いてあります。
私としては、「vb」とか「.NET Framework」がインストールされていない環境のパソコンで作成したプログラムを実行したいのです。方法を教えて下さい。

Aベストアンサー

.NET系言語は、.NETFrameworkというフレームワーク上で動作させます。
よって、.NET系言語から作成したexeファイルは.NETFrameworkが
インストールされてなければ動作する事は出来ません。
(VC++.NETのネイティブコンパイルの場合を除く)

.NETFrameworkを利用したくないなら、VC++.NETを学ぶしかありません。

QVB.NETでテキストファイルからHTMLファイルを動的に生成したいの

VB.NETでテキストファイルからHTMLファイルを動的に生成したいのですがどのようにやればできるかヒントをいただけないでしょうか?
とあるフォルダに下記のようなファイルがあるとします。
20100101AAA.txt
20091008AAA.txt
20100202AAA.txt
20070707AAA.txt
20100412AAA.txt
また、ファイルの中身は
<div id = 'AAA'>それぞれのファイルの内容</div>
<div id = 'BBB'>それぞれのファイルの内容</div>
です。
まず、ファイル名から日付を解析して新しい順番に並べるアルゴリズムを考えたいのですがどのようにしたらいいか困っています。
また、並び変えたファイルを動的に合成して一つのHTMLを作りたいのですがどのようにしたらいいのでしょうか?
詳しい方よろしくお願いします。

Aベストアンサー

後半

  Private Sub OutPutHtmlExec(ByVal p_strHtm As String, ByVal p_htmHtml As HtmlGenericControl, ByVal p_enc As Encoding)
    Dim l_strRet As String = ""

    Using l_fsOut As New System.IO.FileStream(p_strHtm, FileMode.Create)
      Using l_hwHtm As New System.Web.UI.HtmlTextWriter(New System.IO.StreamWriter(l_fsOut, p_enc))

        p_htmHtml.RenderControl(l_hwHtm)
        l_hwHtm.Flush()
      End Using
    End Using
  End Sub

  Private Function ReadTextSJIS(ByVal p_fInf As FileInfo) As String
    Return System.IO.File.ReadAllText(p_fInf.FullName, Encoding.GetEncoding("shift_jis"))
  End Function

  Private Function FindText(ByVal p_strPath As String, ByVal p_strPtn As String) As DataTable
    Dim l_dtbRet As DataTable = FindTextSchema()
    Dim l_dInf As New DirectoryInfo(p_strPath)
    For Each l_fInf As FileInfo In l_dInf.GetFiles(p_strPtn)
      Dim l_drwWk As DataRow = l_dtbRet.NewRow()
      l_drwWk("path") = l_fInf.FullName
      l_drwWk("date") = DateTime.ParseExact(l_fInf.Name.Substring(0, 8), "yyyyMMdd", Nothing)
      l_dtbRet.Rows.Add(l_drwWk)
    Next
    Return l_dtbRet
  End Function

  Private Function FindTextSchema() As DataTable
    Dim l_dtbRet As New DataTable
    l_dtbRet.Columns.Add(New DataColumn("path", GetType(String)))
    l_dtbRet.Columns.Add(New DataColumn("date", GetType(Date)))
    Return l_dtbRet
  End Function
End Class

後半

  Private Sub OutPutHtmlExec(ByVal p_strHtm As String, ByVal p_htmHtml As HtmlGenericControl, ByVal p_enc As Encoding)
    Dim l_strRet As String = ""

    Using l_fsOut As New System.IO.FileStream(p_strHtm, FileMode.Create)
      Using l_hwHtm As New System.Web.UI.HtmlTextWriter(New System.IO.StreamWriter(l_fsOut, p_enc))

        p_htmHtml.RenderControl(l_hwHtm)
        l_hwHtm.Flush()
      End Using
    End Using
  End ...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報