スポンサーリンク
VBSでファイルの書き込みを行った際に、『書き込みできません』、『ファイルを開けませんでした』などのエラーが表示されることがあります。
今回は、その原因と対処法をご紹介したいと思います。
凡例:
(1)ウィンドウのタイトル
(2)エラー
(3)コード
(4)ソース
エラー内容1:
(1)Windows Script Host
(2)ファイルを開けませんでした。
(3) 800A0BBA、800AOBBA、80OA0BBA、80OAOBBA、
8O0A0BBA、8O0AOBBA、8OOA0BBA、8OOAOBBA のいずれか。
(4)ADODB.Stream
エラー内容2:
(1)Windows Script Host
(2)書き込みできません。
(3) 800A0046、800A0O46、800AO046、800AOO46
80OA0046、80OA0O46、80OAO046、80OAOO46
8O0A0046、8O0A0O46、8O0AO046、8O0AOO46
8OOA0046、8OOA0O46、8OOAO046、8OOAOO46 のいずれか。
(4)ADODB.Stream
※ソースについては、数字のゼロ"0"と英字オー"O"の見分けがつかない人がどちらで検索しても、このページに辿り着けるように、全パターンを書いています。
スポンサーリンク
原因
これらのエラーは該当ファイルをすでに開いているために表示されます。
自分ではファイルをまだ開いていないと思っていても『ファイルを開けませんでした』、『書き込みできません』と表示されるエラーは起こる可能性があることを覚えておきましょう。
対処法1:タスクマネージャーで確認
タスクマネージャーを起動し、プロセスで該当ファイルが起動していないことを確認しましょう。
対処法2:ソースコードで確認
ファイルを操作するプログラムを実行した際にエラーが起きた場合は、
きちんとファイル操作したオブジェクトが閉じてあることを確認しましょう。
***例***
実際の画像を見ながら具体的に見ていきましょう。
いずれも処理内容は同じで、エラーが発生する状態のものです。赤線部分の処理でエラー発生します。
ファイル作成のため生成したFn03によって、ファイルを作成した後もファイルがプログラム内部で開き[open]ぱっなしになっていることが原因なので、
対処法は、青線のコメントアウト(※)を解除し、作成したファイルを閉じる[Close]ことです。
※「コード表示(画像)」ボタンを押すと表示されます。
下記の処理内容は、ファイルAに"Hello World"と追記するプログラムです。
既にファイルAがある場合は、"Hello World"と追記して保存します。
ファイルAがない場合は、まずファイルを作成してからプログラムの処理で"Hello World"と追記し保存します。
'------------------------------------------------------------------------
'カレントディレクトリのパス
'------------------------------------------------------------------------
Dim Fso01 : Set Fso01 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn01 : Fn01 = Fso01.getParentFolderName(WScript.ScriptFullName)
'------------------------------------------------------------------------
'------------------------------------------------------------------------
'出力ファイル名
Dim outputFileName : outputFileName = Fn01 & "\logfile.txt"
'------------------------------------------------------------------------
'ファイルが存在する 場合:True
'ファイルが存在しない場合:False
'------------------------------------------------------------------------
Dim Fso02 : Set Fso02 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn02 : Fn02 = Fso02.FileExists(outputFileName)
'------------------------------------------------------------------------
'ファイルが存在しなければ作成する:
'------------------------------------------------------------------------
If Fn03 = False Then
'------------------------------------------------------------------------
'ファイル作成
'------------------------------------------------------------------------
Dim Fso03 : Set Fso03 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn03 : Set Fn03 = Fso03.CreateTextFile(outputFileName)
'Fn03.Close
'Set Fso03 = Nothing
'Set Fn03 = Nothing
End If
'------------------------------------------------------------------------
'ファイルに追記する
'------------------------------------------------------------------------
'出力ストリームの生成・設定(テキスト、UTF-8)
Dim outStream : Set outStream =CreateObject("ADODB.Stream")
With outStream
.Mode = 3
.type = 2
.charset = "UTF-8"
.open
.LoadFromFile(outputFileName)
.Position = .Size
.WriteText "Hellow World", 1
.SaveToFile outputFileName, 2
End With
'------------------------------------------------------------------------
'クローズ処理
'------------------------------------------------------------------------
'ストリームを閉じて、オブジェクトを解放
outStream.Close : Set outStream = Nothing
'------------------------------------------------------------------------
スポンサーリンク
次の画像で行っているのは、先ほどご紹介したものと処理内容は異なりますが、原因と対処法は同じです。
'------------------------------------------------------------------------
'カレントディレクトリのパス
'------------------------------------------------------------------------
Dim Fso01 : Set Fso01 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn01 : Fn01 = Fso01.getParentFolderName(WScript.ScriptFullName)
'------------------------------------------------------------------------
'出力ファイル名
Dim outputFileName : outputFileName = Fn01 & "\logfile.txt"
'------------------------------------------------------------------------
'ファイルが存在する 場合:True
'ファイルが存在しない場合:False
'------------------------------------------------------------------------
Dim Fso02 : Set Fso02 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn02 : Fn02 = Fso02.FileExists(outputFileName)
'------------------------------------------------------------------------
'ファイルが存在する 場合:True
'ファイルが存在しない場合:False
'------------------------------------------------------------------------
Dim Fso03 : Set Fso03 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn03 : Fn03 = Fso03.FileExists(outputFileName2)
'------------------------------------------------------------------------
'ファイルが存在しなければ作成する:
'------------------------------------------------------------------------
If Fn03 = False Then
'------------------------------------------------------------------------
'ファイル作成
'------------------------------------------------------------------------
Dim Fso04 : Set Fso04 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn04 : Set Fn04 = Fso04.CreateTextFile(outputFileName)
'Fn04.Close
'Set Fso04 = Nothing
'Set Fn04 = Nothing
'------------------------------------------------------------------------
End If
'------------------------------------------------------------------------
'ファイル追記
'------------------------------------------------------------------------
Dim Fso05 : Set Fso05 = WScript.CreateObject("Scripting.FileSystemObject")
Dim Fn05 : Set Fn05 = Fso05.OpenTextFile(outputFileName, 8, True)
Fn05.WriteLine("Hellow World")
'------------------------------------------------------------------------
まとめ
ファイルを開く処理、または作成する処理をしたら、
ファイルを閉じる処理を記載することを忘れないように気を付けましょう。
最後までお付き合いいただきありがとうございます!
この情報が誰かの役にたてれば幸いです。