VBScript でファイル入出力する方法
VBScript でファイル入出力する方法
VBScriptでファイル入出力をするには、Scripting.FileSystemObject
(俗に言うFSOってやつ)を使う。
VBScriptそのものには、従来のVBやVBAにあるファイル入出力機能(FreeFile
、Open ~ For ~ As #
、Print
など)はないので注意すること。
また、FileSystemObjectで扱えるテキストファイルの文字コードは、次の2種類だけとなる。
- Unicode形式(UTF-16 LE)
- Ascii形式(シフトJIS)
もし、UTF-8などの別の文字コードを扱いたければ、FileSystemObjectではなくADODB.Stream
を使う必要がある。
ファイル読み込み
OpenTextFile
でファイルを開くと、TextStream オブジェクトが返される。
TextStream オブジェクトを介して文字列を読み取る。
- filename - 必須 - ファイルパス
- iomode - 任意 - どのモードでファイルを開くか
- create - 任意 - filename で指定したファイルが存在しない場合に、新しいファイルを作るかどうか
- format - 任意 - ファイルの文字コード
'FileSystemObjectのオブジェクトを生成
Dim vFso
Set vFso = CreateObject("Scripting.FileSystemObject")
'ファイルを開く
Dim vTs
Set vTs = vFso.OpenTextFile("C:\path\to\file.txt", 1)
'ファイル全体を読み取る
Dim vBuf
vBuf = vTs.ReadAll
'ファイルを閉じる
vTs.Close
Set vTs = Nothing
Set vFso = Nothing
ファイル全体ではなく1行単位で読み取るには、ReadLine
メソッドを使う。
'ファイルの最後に到達する(AtEndOfStreamプロパティがTrueを返す)まで繰り返す
Do While vTs.AtEndOfStream <> True
Dim vLine
vLine = ts.ReadLine '1行読み取る
Loop
ファイル書き込み
CreateTextFile
またはOpenTextFile
でファイルを作ると、TextStream オブジェクトが返される。 TextStream オブジェクトを介して文字列を書き込む。
CreateTextFileの引数
- filename - 必須 - ファイルパス
- overwrite - 任意 - filename で指定したファイルがあった場合、そのファイルを上書きできるかどうか
- unicode - 任意 - ファイルの文字コード。True を指定すると Unicode形式、False を指定すると Ascii形式。
'新しいファイルを作る(ファイルが存在する場合は上書きする)
.CreateTextFile("C:\path\to\file.txt", True)
'新しいファイルを作る(ファイルが存在する場合は上書きしない)
'ファイルが存在する場合 → Microsoft VBScript 実行時エラー: 既に同名のファイルが存在しています。
.CreateTextFile("C:\path\to\file.txt", False)
'書き込みモードでファイルを開く(ファイルが存在しない場合は新しく作る)
.OpenTextFile("C:\path\to\file.txt", 2, True)
'書き込みモードでファイルを開く(ファイルが存在しない場合は作成しない)
'ファイルが存在しない場合 → Microsoft VBScript 実行時エラー: ファイルが見つかりません。
.OpenTextFile("C:\path\to\file.txt", 2, False)
'追記モードでファイルを開く(ファイルが存在しない場合は新しく作る)
.OpenTextFile("C:\path\to\file.txt", 8, True)
'追記モードでファイルを開く(ファイルが存在しない場合は作成しない)
'ファイルが存在しない場合 → Microsoft VBScript 実行時エラー: ファイルが見つかりません。
.OpenTextFile("C:\path\to\file.txt", 8, False)
書き込みモードと追記モードの違い。 書き込みモードは、既存のファイルを新しいデータで置き換える。
追記モードは、既存のファイルの最後に書き込む。
CreateTextFileを使う場合
CreateTextFileは読み取りまたは書き込みに使えるTextStreamを返す。
Dim vFso
Set vFso = CreateObject("Scripting.FileSystemObject")
'新しくファイルを作る(すでにファイルがあったら上書きする)
Dim vTs
Set vTs = vFso.CreateTextFile("C:\path\to\file.txt", True)
'ファイルに文字列を書き込む
vTs.Write "書き込む文字列(Write)"
'ファイルに文字列と改行文字を書き込む
vTs.WriteLine "書き込む文字列(WriteLine)"
'ファイルを閉じる
vTs.Close
Set vTs = Nothing
Set vFso = Nothing
OpenTextFileを使う場合
OpenTextFileは指定したモード(読み取り、書き込み(上書き)、追記)のTextStreamを返す。
Dim vFso
Set vFso = CreateObject("Scripting.FileSystemObject")
'書き込みモードでファイルを開く(ファイルがなければ新しく作る)
Dim vTs
Set vTs = vFso.OpenTextFile("C:\path\to\file.txt", 2, True)
'ファイルに文字列を書き込む
vTs.Write "書き込む文字列(Write)"
'ファイルに文字列と改行文字を書き込む
vTs.WriteLine "書き込む文字列(WriteLine)"
'ファイルを閉じる
vTs.Close
Set vTs = Nothing
Set vFso = Nothing
サンプル集
一時フォルダに一時ファイルを作る
'''
''' 一時ファイルに書き込みます。
'''
''' @param {string} piTextToWrite - 書き込む内容
''' @return {string} 一時ファイルのパス
'''
Function WriteTempFile(ByVal piTextToWrite)
'戻り値初期化
WriteTempFile = ""
'GetSpecialFolder用の定数
'Tempフォルダ
Const TemporaryFolder = 2
With CreateObject("Scripting.FileSystemObject")
'一時フォルダに保存する一時ファイルのパスを生成
Dim vTempFilePath
vTempFilePath = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName())
'上書き許可、Unicode形式でファイルを作る
With .CreateTextFile(vTempFilePath, True, True)
.WriteLine piTextToWrite
.Close
End With
'一時ファイルのパスを返す
WriteTempFile = vTempFilePath
End With
End Function
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。
この記事にコメントをしてみませんか?