ファイル操作その2

と、言う訳で前回でファイル読み込みを行いましたが、 この章ではファイルへ書き込んでみます。 とは言っても、その工程はファイル読み込みとほとんど同じです。 サンプルを見てみましょう。

Option Explicit
 
Dim FSO        'File System Object
Dim objFile    '書き込み対象ファイル
 
'FileSystemObject取得
Set FSO = CreateObject("Scripting.FileSystemObject")
 
'書き込みファイルオブジェクト作成
Set objFile = FSO.OpenTextFile("C:\meso.txt",True)
 
'読み込み
objFile.WriteLine "ものたろう"
objFile.WriteLine "むかーし、むかし、おばあさんが川で洗濯していると、"
objFile.WriteLine "ドンヴラコ、ドンヴラコと、大きな『もの』が流れてきました。"
objFile.WriteLine "家に持ち帰り、割ってみると中から生物が出てきました。"
objFile.WriteLine "おじいさんとおばあさんはそれを「ものたろう」と名付けました"
 
objFile.Close    'ファイルを閉じる
 
'終了処理
Set objFile = Nothing
Set FSO = Nothing

こんな感じです。ほぼ全くと言っていいほどファイル読み込みと同じですよね。

Set objFile = FSO.OpenTextFile("C:\meso.txt",True)

この行はちょっと気になるかもしれません。「何で今から作るファイルを開いとんねん。あるわけないやん」とか思いますよね。 このメソッド、第2引数にTrueを指定すると

「ファイルが存在しない場合は新規作成してから開く」

と、言う意味になります。あった場合はそのまま全部上書きになります。

その他で、ファイル読み込みと違うのはReadLineの代わりにWriteLine使っているくらいなもんです。では、前章と同じく、もう少し汎用化してみましょう。

Option Explicit
 
Const LOG_FILE_EXT = "log"    'ログファイルの拡張子
 
Dim FSO        'File System Object
Dim objFile    '書き込み対象ファイル
Dim strPath    '書き込み対象ファイルパス
 
'FileSystemObject取得
Set FSO = CreateObject("Scripting.FileSystemObject")
 
'読み込みファイルオブジェクト作成
strPath = FSO.BuildPath( _
  FSO.GetParentFolderName(WScript.ScriptFullName), _
  FSO.GetBaseName(WScript.ScriptName) & "." & LOG_FILE_EXT)
 
'書き込みファイルオブジェクト作成
Set objFile = FSO.OpenTextFile(strPath,True)
 
'読み込み
objFile.WriteLine "ものたろう"
objFile.WriteLine "むかーし、むかし、おばあさんが川で洗濯していると、"
objFile.WriteLine "ドンヴラコ、ドンヴラコと、大きな『もの』が流れてきました。"
objFile.WriteLine "家に持ち帰り、割ってみると中から生物が出てきました。"
objFile.WriteLine "おじいさんとおばあさんはそれを「ものたろう」と名付けました"
 
objFile.Close    'ファイルを閉じる
 
'終了処理
Set objFile = Nothing
Set FSO = Nothing

違うのはファイル作成の部分だけですね。 書き込みファイル名を「スクリプトファイル名 + 専用拡張子」としています。ここではログファイルを想定して「.log」としています。 GetBaseNameメソッドはファイル名を渡すとそのファイル名から拡張子を除いたもの(ベース名)を返すメソッドです。まんまですね。

ちなみに本当にログを吐く目的なのであれば、ファイルに書き込むのではなく、Appliction.ShellオブジェクトのLogEventメソッドを使用する事により、ファイルではなくWindowsのイベントログに内容をイベントとして書き出すことができます。「情報」「警告」「エラー」と言った付加情報もつけられますし、WMI等からも管理できますので、こちらの方が一石が何鳥にもなると思います。 この辺はまた、おいおい説明できればと思います。

この記事は訳に立ちましたか?

選択肢 投票
はい 25  
いいえ 13  

  • 2票も入れていただいてありがとうございます。実は半分くらい既に書いて放置していたやつがあるので、近々Upさせていただきます。 -- メソ 2004-09-22 (水) 15:14:36
  • 今週忙しくて全然書けてません・・・。今週中には何とか。。。(締め切り) -- メソ 2004-09-30 (木) 17:13:55
  • メソでもできる/WSH講座/第5章完成しております。 -- メソ 2004-12-07 (火) 22:00:11

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White