2013年1月7日月曜日

【VBScript】800A0036 800A003E ファイル操作エラー

詰まったので、メモ

VBScriptで、
「あるファイルを開き、ある文字列が書かれていれば何もしない、
書かれていなければその文字列を追記する」
という要件があったのですが、

800A0036「ファイルのモードが不正です」
800A003E「ファイルの最期を超えた入力を行おうとしました」

などのエラーが頻発。

テキストストリームオブジェクトの
 AtEndOfStream
 ReadAll
などは「読み取りモード」でないと動作せず、
 Write
 WriteLine
メソッドなどは書き込みモードでないと動作しないことが原因でした。


Dim fs
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Dim ts
Set ts = fs.OpenTextFile(FilePath,1,True) 'いったん読み取りで開く

Dim filebody
If ts.AtEndOfStream Then
 filebody = ""
Else
 filebody = ts.ReadAll
End If
ts.Close

Set ts = fs.OpenTextFile(FilePath,8,True) '書き込みで開き直す

'---------------何か書き込むコード--------------

ts.Close

Set ts = fs.OpenTextFile(FilePath,1,True) '再度読み取りで開く

'---------------書き込み結果を処理(メール送信など)するコード--------------

ts.Close
Set fs = Nothing


なかなか煩わしいですね・・・。

FileSystemObjectに関する詳細は こちら