2006 年 8 月 12 日 23 時 54 分

ファイルアクセス


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


JavaScript は、ブラウザ上で動作する言語だ。
そのため、セキュリティ上の問題もあり、
ファイルアクセスの API は用意されていない。

そのため、ファイルアクセスを行うためには、
外部の COM オブジェクトの力を借りる必要がある。

WSH から利用できるオブジェクトは 2 つ。

・Scripting.FileSystemObject から取得する TextStream
・ADODB.Stream

FileSystemObject は、WSH でも使われており、
昨日使った WScript.StdErr も TextStream である。

TextStream は、名前の通り、テキストファイルへの
アクセスを行うことができるオブジェクトであり、
Shift_JIS と、UTF16 の文字コードに対応している。

ADODB.Stream の方は、柔軟で多機能なオブジェクトだ。
Internet Explorer の脆弱性につけこみ、
ADODB.Stream を使ったコードが、
セキュリティの問題となったことで有名になった。

元は ADO というデータベースアクセス系の API の
一部としての役割でしかなかったのだが、
プログラマにとって魅力的な機能を備えており、
次第に独立して使われるようになってきた。

このオブジェクトは非常に強力であり、
テキストだけでなく、バイナリ入出力、
そして自動、手動での文字コードの変換も可能だ。

今後のことを考えて、ADODB.Stream を使うことにしよう。

では、ADODB.Stream を使って、UTF-8 で保存してみよう。

    var stream = new ActiveXObject("ADODB.Stream");

    stream.Open();

    stream.Type = 2; // adTypeText
    stream.Charset = "UTF-8";
    stream.LineSeparator = -1; // adCRLF

    stream.WriteText("日本語文字列", 1); // adWriteLine
    stream.WriteText("二行目");
    stream.WriteText("これも二行目");

    stream.SaveToFile("C:\TEST.TXT");

    stream.Close();

以上のように書くことで、UTF-8 を指定して、
テキストファイルを作成することができる。

基本は Open メソッドで準備し、
Type プロパティでテキスト入出力を指定し、
Charset プロパティで符号化方法を決める。
LineSeparator プロパティでは、改行文字を指定する。

後は WriteText メソッドで書き込んでいく。
第 2 引数に adWriteLine を指定すると、
指定した文字の後に、改行が追加で出力される。

SaveToFile メソッドを呼び出すと、
Stream に書き込まれた全ての内容をファイルに書き出す。

これを実行すると、C ドライブに TEST.TXT が作成される。
文字コードは UTF-8 で書き込まれているはずだ。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.