8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JScriptでのScripting.FileSystemObjectオブジェクト TIPS

Posted at

はじめに

「FileSystemObject」を使う時によく使うコードをつらつらと

スクリプトフォルダ

スクリプトのカレントパスを取得するコードです。
「WScript」オブジェクトから実行中のスクリプトパスの親フォルダを取得しています。
末尾に「/」が無いので、文字列連結するときは注意して下さい。

// 「FileSystemObject」オブジェクト生成
var fso = new ActiveXObject("Scripting.FileSystemObject");
// Scriptのカレントパス取得
var folderName = fso.GetParentFolderName(WScript.ScriptFullName);

フォルダ生成

存在するフォルダ上にフォルダを生成するメソッドはあるのだが、
存在しないフォルダが2つ以上ある場合、エラーとなってしまうので
そういう場合にも対応したメソッドです。

// 「FileSystemObject」オブジェクト生成
var fso = new ActiveXObject("Scripting.FileSystemObject");

function createFolder(folderpath) {
    // フォルダ存在チェック
    if (!fso.FolderExists(folderpath)) {
        if (fso.GetParentFolderName(folderpath)) {
            // フォルダが存在しなかったので、親フォルダ生成
            createFolder(fso.GetParentFolderName(folderpath));
            // フォルダ生成
            fso.CreateFolder(folderpath);
        }
    }
}

ファイル読込

ファイル全体を読み込む場合、「TextStream」オブジェクトの「ReadAll」メソッドを使えばいいのだが
この「ReadAll」メソッドは、不具合があってファイル内にNULL文字(0x00)がある場合、正常に動作しない。
ちなみに、「ReadLine」も同じ不具合を持っています。

// 「FileSystemObject」オブジェクト生成
var fso = new ActiveXObject("Scripting.FileSystemObject");


function readAll(ts, close) {
    // テキスト初期化
    var text = "";
    // ファイルの末尾までループ
    while (!ts.AtEndOfStream) {
        // ファイル読込
        text += ts.Read(1024);
    }
    // クローズ判定
    if (close) {
        // クローズ
        ts.Close();
    }
    return text;
}

使用例

var ts = fso.OpenTextFile("c:\\text.txt", 1);
var text = readAll(ts, true);

なんて、「ReadAll」はダメで、「Read(1024)」とかは大丈夫なんだろ・・・不思議

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?