ファイルの読み出し・書き出し


このドキュメントはJavaScriptについて知識があるという前提で書かれています。

■はじめに

このページでは、WSHでのファイル読み書きについて実践的なTipsを紹介しています。 各命令の詳細などについてはここでは触れませんので、 各命令の構文などの仕様については、Microsoft社提供の JScriptリファレンスや、 WSHリファレンスを参照してください。

HTAにおけるファイル操作も基本は一緒ですので、このページも参考になると思います。

なおこのページでは、ActiveXオブジェクトの作成方法に ActiveXObjectオブジェクトを使って説明しています。(HTAでも利用可能な為)
  (例) var fs = new ActiveXObject("Scripting.FileSystemObject");
WSHでは、CreateObject メソッドも使用する事が出来ます。
  (例) var fs = WScript.CreateObject("Scripting.FileSystemObject");
WSHではどちらの方法でも変わりはありません。

■新規ファイルに書き出す

ファイルの新規作成は、 FileSystemObjectの CreateTextFileメソッド を使用して行います。
CreateTextFileメソッドは、新規ファイルを作成し、 そのファイルの読み書きに使えるTextStreamオブジェクトを返します。 例えば、"C:\test.txt"というファイルを新規に作成して、 そのファイルに"ほげほげ"と書き出したいとします。

var fs = new ActiveXObject("Scripting.FileSystemObject");
var file = "C:\\test.txt";
var tstr = fs.CreateTextFile(file, false); //ファイルの新規作成
tstr.Write("ほげほげ"); //ファイルへの書き出し
tstr.Close(); //ファイルを閉じる

このプログラムを実行すると、C:\にtest.txtファイルを作成し、 そのファイルに"ほげほげ"と書き出します。

このプログラムはC:\test.txtが既に存在する場合はエラーが発生してしまいます。 その場合、CreateTextFileメソッドの二つ目の引数に true を指定すれば 強制的に上書きされます。 しかしファイルの上書きを行いたくない場合もあると思いますので、そのような場合は 予めファイルの存在をチェックしておきます。(下記プログラム)

var fs = new ActiveXObject("Scripting.FileSystemObject");
var file = "C:\\test.txt";
if(fs.FileExists(file)) {
  WScript.Echo("ファイルが既に存在します。"); //エラーメッセージ
}
else {
  var tstr = fs.CreateTextFile(file); //ファイルの新規作成
  tstr.Write("ほげほげ"); //ファイルへの書き出し
  tstr.Close(); //ファイルを閉じる
}

このプログラムを実行すると、既にファイル(C:\test.txt)が存在する場合、 エラーメッセージを出してファイルの書き出しを行いません。 (*本当は上書き確認のダイアログを出した方がいいんでしょうが、JScript単体では出来ないので(^^;)

さて、ここで説明を終わりにしてもいいのですが、ちょっと気付いた事があるので補足させて頂きます。 CreateTextFileメソッドの2つ目の引数は 既存ファイルを上書きするかどうかのブール値を指定します。 これは省略可能で、省略された場合はデフォルト値として false を取ります… とリファレンスには書いてあるのですが、 今利用しているJScript5.0ではこの値を省略した場合、 デフォルト値として true を取ってしまうようです。 自分のマシンが悪いのか、仕様のバグなのか、リファレンスの書き間違いなのかは 分かりませんが、一応御注意してください。

■ファイルを開いて読み出す

既にあるファイルを開いて、そこから中身を取り出すには、 OpenTextFileメソッドやOpenAsTextStream メソッドを使用します。 ここではOpenTextFileメソッドを利用して説明します。