• ベストアンサー

vbsで同一ファイルに出力するには

お世話になります。 vbsでログ出力プログラムを作成しています。 このプログラムは同時に複数のプログラムから呼び出されます。 同時書込みの試験をしていた所、2番目に実行したログ出力プログラムでログ出力に 失敗してしまいました。 ###試験方法### ファイルのオープンとクローズの間にmsgboxを実行し、オープン中を維持した状態で、 ログ出力プログラムを実行し、追記処理を行いました。 ###質問内容### 同時書込みは可能でしょうか。 可能な場合、その方法をご教授頂けますでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4851/10265)
回答No.2

同時オープンは無理です。ログの発生都度、 1)アペンドモードでオープン 2)ライト 3)クローズ を行う必要があります。 他プログラムでオープン中はオープンが失敗すると思うので、ちょっとSleepしてリトライする必要がありますね。

ken__t
質問者

お礼

notnot様 ご回答有難うございました。 排他ロックの解決策を模索しておりましたが無理であることがわかりました。 sleepを用いるという方法は気が付きませんでした。 案として持ち帰って、提案したいと思います。 有難うございました。

その他の回答 (1)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>同時書込みは可能でしょうか。 無理です。 通常、ファイルを書き込みモードで開く時は排他ロックがかかります。

ken__t
質問者

お礼

Bonjin様 ご回答有難うございました。 排他ロックの解決策を模索しておりましたが無理であることがわかりました。 結果を持ち帰って仕様自体の見直しをする事といたします。 有難うございました。

関連するQ&A

  • VBSに関する質問

    VBSを使ってプログラムを作りたいのですが、 visual studioを使ったデバッグの方法について教えてください。 バージョンはvisual studio express 2013で最新バージョンです。 OSはwin8 64bitです。 ・とりあえず、 http://winscript.s41.xrea.com/wiki/index.php?%5B%5B%A5%A8%A5%C7%A5%A3%A5%BF%2FVWD2005%5D%5D のページにあるように、 タイトル VBSスクリプトの実行(&R) コマンド C:\WINDOWS\system32\wscript.exe 引数 $(ItemPath?) を外部ツールに登録した上で MsgBox "テスト" と書かれた適当なvbsファイルをD&Dで読み込ませてみたのですが コードの色分けが行われておらず全て同じ色になっています。 http://www.koutou-software.co.jp/junk/use-vs-project-with-vbscript.html このページのようにdimなどを青色に表示するにはどうしたら良いですか? ・MsgBox "テスト"の左横にブレイクポイントの赤い丸を付けて VBSスクリプトの実行をしたのですが、 特にプログラムを停止することなく実行されてしまうのですが どうすれば指定した位置でプログラムを止めることができますか? ・あとEXEファイルとして出力したいのですが ビルド機能が見つからないのですがどうすれば良いですか? ・http://www.koutou-software.co.jp/junk/use-vs-project-with-vbscript.html このページには Visual C++としてプロジェクトを作成し、いろいろな設定を行った後にするみたいな解説がありますが この通りやっても、wscript.exeが見つからないというようなエラーが出て 実行することができませんでした。 少し質問が多いですが よろしくお願いいたします。

  • VBSでのファイル読込、出力操作について

    いつもありがとうございます。 掲題の件について、ご教授頂けますでしょうか。 下記のように『start.vbs』を実行すると『a.txt』の行に記載されている実行ファイル名を読み込み 『test.vbs』にファイル名分のコマンドを書き込みしたいです。 例) ----------------------------- start.vbs (作成途中) ----------------------------- Set objWShell = CreateObject("wscript.shell") Set objFso = CreateObject("Scripting.FileSystemObject") Set objFile = objFso.OpenTextFile("c:\a.txt", 1, False) ' 出力先ファイル Set objVBSFile = objFSO.CreateTextFile(c:\test.vbs, True) If Err.Number > 0 Then WScript.Echo "Open Error" Else Do Until objFile.AtEndOfStream objVBSFile.WriteLine(objFile.ReadLine) Loop End If ----------------------------- a.txt ----------------------------- adobe.exe photoshop.exe ****.exe    ・    ・    ・ ------------------------------ start.vbs ------------------------------ objWShell.Run "cmd.exe c:\adobe.exe ", 0, True objWShell.Run "cmd.exe c:\photoshop.exe ", 0, True objWShell.Run "cmd.exe c:\****.exe ", 0, True    ・    ・    ・ vbsをサイトを参考にして作ってはいるものの、start.vbsを実行すると a.txtのファイル名をvbsに書き込むのが限界です。 少しずつ勉強していくのですが、本件少し早めに作りたいという背景があり ご教授頂けませんでしょうか。 また、わかりにくい説明となっておりますが どうぞ宜しくお願い致します。

  • “.vbs”のファイルが実行できない

    まったく初歩的な質問で申し訳ないのですが、拡張子がvbsのファイルが実行できません。 あるソフトをアンインストールするために実行したいんですが、ダブルクリックするとアプリケーションを選べみたいなのが出てきて、よく分かりません。 一応、そのvbsファイルをNotepadで開いてみたものを載せときます。 ---------------------------------------- On Error Resume Next set shell = CreateObject("WScript.Shell") set fso = CreateObject("Scripting.FileSystemObject") bcp="C:\Program Files\BCP" msg = msgbox("ブラクラでヤバイVer4をアンインストールしますか?",vbYesNo) if msg=vbNo then WScript.Quit if fso.FolderExists("C:\Program Files\BCP\")then fso.DeleteFolder bcp msgbox "フォルダの削除完了" end if shell.RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\ブラクラでヤバいでチェック\") shell.RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\ブラクラでヤバいを起動\") msgbox("アンインストールが完了しました。"&Chr(13)&Chr(13)&"By 禿親父") ---------------------------------------- どなたか分かる方いましたら教えてください。 よろしくお願いします。

  • VBSでADOを使ってaccessのテーブルに接続

    VBSでADOを使ってaccessのテーブルに接続する方法は? Sub ADO_test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & "D:\【Access】サンプル.mdb" rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic MsgBox "test成功です" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub をACCESSVBAで実行すると成功しますが 全く同じコードをメモ帳に貼り付けてtest.vbsで保存し、ダブルクリックすると、 行:3 文字:11 エラー:ステートメントの末尾が不正です。 コード:800A0401 のエラーになります。 VBAは少しわかるのですが、VBSに関しては初心者です。 どこを修正すればコードが通るのか教えてください。

  • 【テキストファイルへの出力ができない】

    お世話になっております。 以前こちらで質問させていただき、親切なご回答のおかげて解決したのですが、 新たに問題が出てしまいました。 ご存知の方、どうかご教授くださいませ。 WindowsVistaで、IE8を利用した場合、 IE右クリックを拡張で実行させたプログラムで、 「テキストへの書き込み」ができません。 XPでIE6を利用すると、きちんと動きます。 たとえば、http://www.happy2-island.com/vbs/cafe02/capter00207.shtml のサイトのプログラムを、【test1.vbs】という名前で保存します。 書き込み先を、同じフォルダに作った【test2.txt】というテキストファイルに指定します。 Windows Based Script Hostでvbsファイルをそのまま実行すると、ちゃんと【test2.txt】に 情報が書きこまれるのですが、 IE右クリックに登録して実行すると、【test2.txt】は白紙のままです。 特にエラーも出ないため、原因がまったくわかりません。 原因にお心当たりのある方がいらっしゃいましたら、 どうかお教え下さい。 宜しくお願いいたします。

  • VB6でWSH(vbs)を起動できる方法を教えてください。

    visual Basic 6でアプリケーションを開発していますが、 このアプリケーション(exe)から、test.vbsを起動したいと考えています。 ====vbのコード===== 'ボタンクリックしたら、test.vbsが実行される Private Sub Command1_Click() shell("test.vbs") End Sub ==== test.vbs ==== MsgBox("test.vbs起動しました。") です。 上記のようにコードを書きましたが、Shell関数で 「実行時エラー'5' プロシージャの呼び出し、または引数が不正です。」 のメッセージが出力されて、vbsが起動できません。 VB6でWSH(vbs)を起動できる方法を教えてください。 環境は以下の通りです。 OS:WIN2000 アプリ:VB6 ブラウザ:IE5.0

  • ASPからVBS実行時の権限

    ASPからWscript.Shellを使ってVBSを実行しているのですが、 ASP中のDBオープンには問題はないのですが、test.vbs中でオープンできません LOGファイルは"dbConnection-OK"までになっています。 権限の問題かどうかはわからないのですが、原因は何でしょうか? DBはODBC経由のSQLServerです。 ---------ASP-------------------------------------- <% Dim dbConnection Set dbConnection = CreateObject("ADODB.Connection") dbConnection.Open "testdb" dbConnection.Close Set dbConnection = Nothing '上記OPENに関して問題なし Dim WshShell Set WshShell = CreateObject("Wscript.Shell") WshShell.Run "cscript.exe e:\test.vbs 123", 0, True Set WshShell = Nothing %> <html> <head> <meta http-equiv="Cache-Control" content="no-cache" /> <title>Pipot.to</title> </head> <body> OK </body> </html> ---------test.vbs-------------------------------------- Dim ObjFSO Dim ObjTS Set ObjFSO = CreateObject("Scripting.FileSystemObject") Set ObjTS = ObjFSO.CreateTextFile("e:\log.txt") ObjTS.Write "LOG開始" Dim dbConnection Set dbConnection = CreateObject("ADODB.Connection") ObjTS.Write "dbConnection-OK" dbConnection.Open "testdb" ObjTS.Write "OPEN-OK" dbConnection.Close Set dbConnection = Nothing ObjTS.Close Set ObjTS = Nothing Set ObjFSO = Nothing

  • vbsからのWordマクロ実行

    やりたいこと  vbsからWordマクロを実行し復帰値をMsgBoxで表示する。 問題点  Test関数を実行し復帰値を取得したいのですがコンパイルエラーとなってしまいます。   正しい書き方を教えてください。 Set oApp = CreateObject("Word.Application") oApp.Documents.Open WScript.Arguments(0) Dim code code = oApp.Run Test ★ MsgBox code

  • テキストファイルへの出力方法

    テキストファイルへログを出力したいのですが、 VBの記述がわかりません。 やろうとしていることは、 ・Excelオープンと同時にログファイルをオープン ・ボタン押下時にログファイルに出力 です。 ファイルのオープンでは  'ワークブック オープンイベント Dim fs1, a As Object Set fs1 = CreateObject("Scripting.FileSystemObject") Set a = fs1.CreateTxtFile("ログファイル名", True) と記述し、出力時には  'ボタンクリックイベント    a.WriteLine("出力文字列") として出力をしようと思うのですが、 プロシージャが違うためか、出力時に 「オブジェクト変数またはWithブロックが定義されていません」とのエラーが出てしまいます。 Withブロックの定義は正しく書かれてあります。 どうやって回避できるでしょうか? 宜しくお願いします。

  • windowsのC#での話です。あるプロセスが断続的(数秒程度で一定し

    windowsのC#での話です。あるプロセスが断続的(数秒程度で一定しません)に、ログファイルをオープンして内容を書き込んでファイルをクローズして、、、ということをやっています。で、そのログファイルをtail -fコマンドのように監視するコードを書きたいのですが、どのように書けばいいのかわかりません。FileStream("logfile.txt", FileMode.Open, FileAccess.Read, FileShare.Read)としてファイルをオープンし、ファイルの最後までseekして、それ以降は永久に、1秒sleepしては該当ファイルの内容を読み込み続ける、というプログラムを書いたのですが、このコードを実行すると、このオープンしたログファイルを他のプログラムからは書き込みのために新たにopenできなくなるようで、他のプログラムがログファイルの書き込みでエラーを出力するようになってしまいました。 tail -fをc#で書くにはどのようなコードを書けばいいのでしょうか。ご教授ください。