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に関する詳細は こちら