web-dev-qa-db-ja.com

FileSystemObjectを使用してJavaScriptでファイルを読み取る方法

FileSystemObjectでファイルを読みたい。私のコードは次のとおりです。

<!DOCTYPE html>
<html lang="en">
<head>
<title>Read json</title>
</head>

<body>
<script type="text/javascript">

function readFile(filename){
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var ForReading = 1;
    var f1 = fso.OpenTextFile(filename, ForReading);
    var text = f1.ReadAll();
    f1.close();
    return text;
}

myJSONText = "text.txt";
var myObject = readFile(myJSONText);//eval('(' + myJSONText + ')');

document.write(myObject.name);
</script>
</body>
</html>
6
Bryant

まず、上記のコメントを繰り返します。 ActiveXObjectクライアント側を使用してすべきこととして称賛されたことはありません。

さて、私はこれを自分で行う方法を学ぼうとしていると言わせてください。この質問に関するいくつかの考え(および役立つリンク、下部を参照)を次に示します。

MSDNの スクリプトクリニックの列 の「Much ADO aboutTextFiles」」によると一般的なレイアウトは次のとおりです。

  1. オブジェクトを作成します。
  2. 最初のオブジェクトのメソッド(ファイルの取得など)を使用する、最初のオブジェクトを使用して別のオブジェクトを作成します。
  3. ファイルに何かをします。
  4. ファイルを閉じます。

どうやって始めますか? IE Dev Center(linked here )によると、JavascriptでActiveXObjectを次のように使用します。

_newObj = new ActiveXObject(servername.typename[, location])
_

コードでfsoを宣言すると、それがわかります。この「サーバー名」についてはどうですか、ファイルはローカルでアクセスされていませんか? 「サーバー名など」の代わりに_Scripting.FileSystemObject_を入力しました。ホストPCのHKEY_CLASSES_ROOTレジストリキーがサポートしている場合、これは実際には問題ありません(上記の参照を参照)。

ActiveXObjectが正常に宣言され、ブラウザがそれを許可する場合(IEのみ)、およびエンドユーザーがポップアップする警告に同意する場合(「このページのActiveXコントロールは、ページの他の部分と対話するのが安全でない可能性があります。 .. "など)、thenオブジェクトを使用すると、そのオブジェクトに関連付けられている任意のメソッドを使用できます。そこで、Windows ScriptingFileSystemObjectの機能が発揮されます。

FileSystemObject(fso)メソッドが使用できるようになりました。これは、その名前が示すように、ローカルマシンでのファイル(およびディレクトリ)の相互作用を意味します。あなたの質問が焦点を当てているので、読むだけでなく、書く削除も同様です。メソッドとプロパティの完全なリストは、MSDN ここ で入手できます。使用後は、.close()メソッドを使用してファイルを閉じます。

したがって、これは明らかな理由で危険です。しかし、最初は私には明らかではなかったのは、ファイルシステムとのこれらの相互作用が目に見えない形で発生する可能性があるということでした。ファイルの読み取りからディレクトリツリーの削除まで、何をするにしても、数行のコードが原因で何が起こっているのかを知らせる警告やコマンドプロンプトが表示されない可能性があります。

最後に、上記のコードの最後の部分についてコメントします。 FileSystemObjectから取得したデータとJSONを組み合わせて使用​​すると、JavaScriptの相互作用を可能にする優れた方法が提供されます( JSON .parseおよび.stringify すぐに思い浮かびます)。これにより、おそらくHTML5ローカルストレージの代わりに、データをローカルに保存できます(ref this SO thread 、この概念をさらに詳しく説明します。別のSO私がこれについて提起した質問 ここ )。

さらに読むためのいくつかのリンクがあります:
IE Dev Center、JavaScriptオブジェクト、ActiveXObject
MSDN JScript Windowsスクリプティング (FileSystemObjectメソッドなどを含む)
MSDNスクリプティングクリニック (古い記事、多くの壊れたリンクがありますが、このようなものに関する多くの良い情報があります)

5
Aaron Thomas