JavaScriptでActiveXObjectを使ってローカルフォルダを操作する方法


Windowsプラットフォームでは、jsは多くのWindowsからActivexObjectを呼び出すことができます。ここではjsを使って文書処理を実現し、jsを使ってActiveXを作成して簡単に紹介します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>

 </head>
<script type="text/javascript">
 function readFolder(){
 var filePath = "d:\\test\\";
 var fso = new ActiveXObject("Scripting.FileSystemObject");   //
 var f = fso.GetFolder(filePath);
 var underFiles = new Enumerator(f.files); //
for (;!underFiles.atEnd();underFiles.moveNext()){  
             var fn = "" + underFiles.item();  
               //alert(fn);
          var content = readFile(fn,fso);
                 alert(content);
                    }  

 }
function readFile(path,fso){
var f1 = fso.GetFile(path);
var fh = fso.OpenTextFile(f1, 1/*reading*/);
               var content = '';
               while ( !fh.AtEndOfStream ) {
                      content += fh.ReadLine();
               }
               fh.close()
      return content;
}

function writeExcel(){
 var ExcelApp = new ActiveXObject("Excel.Application");
  var ExcelSheet = new ActiveXObject("Excel.Sheet");
  ExcelSheet.Application.Visible = true;
 ExcelSheet.ActiveSheet.Cells(1,1).Value = "This is column A, row 1";
 ExcelSheet.SaveAs("d:\\TEST.XLS");
 ExcelSheet.Application.Quit();
}
</script>
 <body>
  <input type="button" value=" " onclick="readFolder()">
<input type="button" value=" excel" onclick="writeExcel()">
 </body>
</html>

JavaScriptのActiveXObjectオブジェクトは、Automationオブジェクトの参照を有効にして返します。使用方法:
newObj=new ActiveXObject(servername.typename[,location])
ActiveXObjectオブジェクト文法にはこれらの部分があります。ここでnewObjは必須です。ActiveXObjectの変数名を指定します。servernameは必須オプションです。オブジェクトのアプリケーション名を提供します。typenameは必須です。作成するオブジェクトの種類またはクラス。locationはオプションです。オブジェクトのネットワークサーバ名を作成します。
メモ:ActiveXはマイクロソフトのものです。だから、このおもちゃはIEだけがサポートします。
javaScriptではActiveXObjectを利用してFileSystemObjectの操作ファイルを作成します。
一、機能実現コア:FileSystemObject対象
Javascriptでファイルの操作機能を実現するには、主としてFileSystemobjectのオブジェクトに依存します。
二、FileSystemObjectプログラミング
FileSystemObjectオブジェクトを使ってプログラミングするのは簡単です。一般的には、FileSystemObjectオブジェクトの作成、関連方法の適用、オブジェクトの関連属性の作成などの手順があります。
(一)FileSystemObjectオブジェクトを作成する
FileSystemObjectオブジェクトを作成するコードは1行のみです。var fso=new ActiveXObject(「Script.FileSystemObject」)。上記のコードを実行すると、fsoはFileSystemObjectオブジェクトの一例となります。
(二)関連方法の適用
オブジェクトインスタンスを作成すると、オブジェクトの関連方法が使用できます。例えば、CreateTextFileを使ってテキストファイルを作成します。var fso=new ActiveXObject(「Script.FileSystemObject」)。var f 1=fc.reat extfile("c:\\myjstest.txt",true");(三)訪問先の関連属性は、まず対象に向けたハンドルを作成する。これは、GetDriveがドライバ情報の取得を担当し、GetFolderがフォルダ情報の取得を担当し、GetFileがファイル情報の取得を担当する。例えば、下のコードを指したら、f 1はファイルc:\test.txtのハンドルになります。var fso=new ActiveXObject(Script.FileSystemObject);var f 1=fso.GetFile("c:\\myjstest.txt")その後、f 1を使用してオブジェクトの関連属性にアクセスします。たとえば:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.GetFile("c:\\myjstest.txt");
alert("File last modified: " + f1.DateLastModified);
上の最後の文を実行すると、c:\myjstest.txtの最後の変更日付属性値が表示されます。ただし、createメソッドを使って作成したオブジェクトに対しては、getメソッドを使ってオブジェクトのハンドルを取得する必要はありません。この場合、直接createメソッドで作成したハンドル名を使えばいいです。

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.createtextfile("c:\\myjstest.txt",true");
alert("File last modified: " + f1.DateLastModified);
三、操作ドライバ(Drives)
FileSystemObjectオブジェクトを使ってオペレーティングドライブ(Drives)とフォルダ(Folders)をプログラミングするのは簡単です。これはWindowsファイルブラウザでファイルをインタラクティブに操作するように、例えばコピー、移動フォルダ、フォルダの属性を取得するためです。一)Drivesオブジェクト属性Driveオブジェクトは、収集システムにおける物理または論理ドライバのリソース内容を担当しています。これは、以下のような属性を持っています。l TotalSize:バイト単位で計算されるドライバサイズです。l Available SpaceまたはFree Space:バイト単位で計算したドライバの利用可能空間。l Drive Letter:ドライバアルファベット。l Drive Type:ドライバタイプは、removable(モバイルメディア)、fixed(固定媒体)、network(ネットワークリソース)、CD−ROMまたはRAMディスクです。l SerialNumber:ドライバのシリーズコードです。l FileSystem:所在ドライバのファイルシステムタイプで、取得値はFAT、FAT 32とNTFSです。l IsReady:ドライバは利用可能ですか?l Share Name:共有名称。l VolumeName:ボリュームネーム。l PathとRootFolder:ドライバのパスまたはルートディレクトリ名。
(二)Driveオブジェクト操作ルーチン
以下のルーチンは、ドライバCのボリューム、容量、利用可能空間などの情報を表示します。

var fso, drv, s ="";
fso = new ActiveXObject("Scripting.FileSystemObject");
drv = fso.GetDrive(fso.GetDriveName("c:\\"));
s += "Drive C:" + " C ";
s += drv.VolumeName + "
";
s += "Total Space: " + drv.TotalSize / 1024;
s += " Kb" + "
";
s += "Free Space: " + drv.FreeSpace / 1024;
s += " Kb" + "
";
alert(s);
四、操作フォルダ(Folders)
フォルダに関する操作には、作成、移動、削除、関連属性の取得が含まれます。Folderオブジェクト操作ルーチン:以下のルーチンでは、親フォルダ名の取得、フォルダ作成、フォルダ削除、ルートディレクトリかどうかを判定する操作を行います。

var fso, fldr, s = "";
// FileSystemObject
fso = new ActiveXObject("Scripting.FileSystemObject");
// Drive
fldr = fso.GetFolder("c:\\");
//
alert("Parent folder name is: " + fldr + "
");
// drive
alert("Contained on drive " + fldr.Drive + "
");
//
if (fldr.IsRootFolder)
alert("This is the root folder.");
else
alert("This folder isn't a root folder.");
alert("

");
//
fso.CreateFolder ("C:\\Bogus");
alert("Created folder C:\\Bogus" + "
");
// ,
alert("Basename = " + fso.GetBaseName("c:\\bogus") + "
");
//
fso.DeleteFolder ("C:\\Bogus");
alert("Deleted folder C:\\Bogus" + "
");
五、操作ファイル(Files)
ファイルの作成、コピー、移動、削除操作とファイル内容の作成、追加、削除、読み取り操作は基本的に以下の2つのカテゴリに分けられます。それぞれ詳しく紹介します。一)ファイルの作成には全部で3つの方法があります。空のテキストファイルを作成するために使用できます。このようなファイルはテキストフローとも呼ばれます。一つはCreateText File法を使用することである。コードは以下の通りです

var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
二つ目はOpenTextFile法を使用してForWriting属性を追加し、ForWritingの値は2です。コードは以下の通りです

var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true);
三つ目はOpenAsTextStream方式を使用して、同様にForWriting属性を設定します。

var fso, f1, ts;
var ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile ("c:\\test1.txt");
f1 = fso.GetFile("c:\\test1.txt");
ts = f1.OpenAsTextStream(ForWriting, true);
(二)ファイルにデータを追加する
ファイルが作成されると、一般的には「ファイルを開く-」でデータを記入->ファイルを閉じる」という手順でデータをファイルに追加する目的が実現されます。ファイルを開くには、FileSystemObjectオブジェクトのOpenTextFile方法、またはFileオブジェクトのOpenAsTextStream方法が使用されます。データを記入するにはText StreamオブジェクトのWrite、WriteLine、またはWriteBlankLinesメソッドを使用します。同じ書込みデータを実現する機能の下で、この3つの違いは、Write方式は書き込みデータの末尾に新しい改行符を追加しないことであり、WriteLine方法は最後に新しい改行符を追加し、WriteBlankLinesは1つまたは複数の空行を追加することである。ファイルを閉じるには、TextStreamオブジェクトのCloseメソッドが使用されます。
(三)ファイルの作成とデータの追加のルーチン
以下のコードはファイルを作成し、データを追加し、ファイルを閉じるいくつかのステップを組み合わせて適用します。

var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject");
//
tf = fso.CreateTextFile("c:\\testfile.txt", true);
// ,
tf.WriteLine("Testing 1, 2, 3.") ;
// 3
tf.WriteBlankLines(3) ;
// ,
tf.Write ("This is a test.");
//
tf.Close();
(四)ファイルの内容を読み取る
テキストファイルからデータを読み取るには、TextStreamオブジェクトのリード、ReadLine、またはReadAll方法が必要です。Readメソッドは、ファイル内の指定された数の文字を読み取るために使用されます。ReadLineメソッドは、行全体を読みますが、改行は含まれません。ReadAllメソッドでは、テキストファイルの全体を読みだします。読み出した内容は文字列変数に格納され、表示、分析に使用されます。ReadやReadLineを使ってファイルの内容を読み取る場合、いくつかの部分をスキップするには、SkipやSkipLineの方法が必要です。以下のコードのデモはファイルを開いて、データを記入して、データを読みます。

var fso, f1, ts, s;
var ForReading = 1;
fso = new ActiveXObject("Scripting.FileSystemObject");
//
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
//
f1.WriteLine("Hello World");
f1.WriteBlankLines(1);
//
f1.Close();
//
ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
//
s = ts.ReadLine();
//
alert("File contents = ‘" + s + "‘");
//
ts.Close();
(五)ファイルの移動、コピー、削除
以上の3つのファイル操作に対して、javascriptはそれぞれ2つの対応方法があります。File.MoveまたはFileSystemObject.MoveFileはファイルを移動するために使います。File.CoopyまたはFileSystem Object.CoopyFileはファイルのコピーに使います。File.DeleteまたはFileSystem Object.DeleteFileはファイルを削除するために使用されます。以下のコードのデモはドライバCのルートディレクトリの下でテキストファイルを作成し、いくつかの内容を記入し、ファイルを\tmpディレクトリの下に移動し、ディレクトリ\tempの下にファイルコピーを作成し、最後にこの二つのディレクトリのファイルを削除します。
六、結語
以上を通じてFileSystemObjectの各種の対象、属性と方法の紹介と例を通して、Javascript言語をどのように使ってページの中でドライバ、ファイルとフォルダを操作しますか?しかし、上記のルーチンは非常に簡単です。Javascriptファイルの操作技術を全面的かつ柔軟に把握するためには、多くの実践練習が必要です。またもう一つの注意点は、ブラウザでファイルの読み書きを行うという上級操作に関連していますので、デフォルトのブラウザのセキュリティレベルについては、コードの実行前にメッセージが表示されます。これは実際の環境で訪問者に注意を促してください。