|
||||
|
|
15章 ASPからのファイル操作
|
|
|
初めに
カウンタといったプログラムを作成する場合、現在何人目の訪問者かを出力するために、どうしてもサーバ側に値を保持しておく仕組みが必要となります。データの信頼性などを考慮するとデータベースという選択肢がベストであるとは思いますが、たかがひとつのデータを保存しておくのにわざわざデータベースを使用するのも敷居が高く、戸惑ってしまいます。
そんなデータであれば扱いやすいテキストファイルを使用してデータを保存しておく事をお勧めします。処理が簡素化出来ますし、何より SQLと呼ばれるデータベース問い合わせ言語をわざわざ覚える必要がありません。 テキストファイルの読込み/書込み、ファイルの情報取得/移動/削除といった操作も ASPから行う事が出来ます。 [ ASPから行う事が出来ます ] を書いてしまいましたが、実際には、ASPから FileSystemObject というオブジェクトを使用してファイルを操作することになります。 これからこのオブジェクトが提供する コレクション/オブジェクト/メソッド/プロパティについて、使い方を見てみましょう。 ちなみに FileSystemObject は ScrObj.dll というインプロセス COM サーバーに実装されています。 FileSystemObjectの使い方/ファイル操作メソッドFileSystemObjectの使い方
これまで Responseオブジェクトや Requestオブジェクトといったオブジェクトを紹介してきましたが、この FileSystemObject では使用法が異なってきます。前者が [ 組み込みオブジェクト ] と呼ばれるオブジェクトで、これらは使用する前に先立ってオブジェクトのインスタンスを生成すると言う作業が発生しません。しかし FileSystemObject は組み込みオブジェクトではありませんので、以下のような記述でインスタンスを生成する必要があります。
Dim objFSO Set objFSO = CreateObject("Scripting.FileSystemObject") 例えば FileSystemObjectオブジェクトの実装するメソッドを呼び出すには以下のようになります
Dim objFSO Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile "パラメータ" Set objFSO = Nothing FileSystemObjectのファイル操作メソッド
CopyFile
FileSystemObject.CopyFile コピー元ファイル , コピー先ファイル , [上書きフラグ]
指定したファイルの複製を作成します。コピー元ファイルが存在しない場合、コピー先ファイルに書き込めなかった場合はエラーが発生します。また第3引数を Falseとした場合、既にコピー先にファイルが存在する場合上書きを行いません。既定値は True です。 [ Sample ] この例では index.htmファイルを index.bkとして複製を作成します。
objFSO.CopyFile "c:\wwwroot\index.htm", "c:\wwwroot\index.bk"
CreateTextFile
[ Set ] TextStreamオブジェクト = FileSystemObject.CreateTextFile ( ファイル名, [ 上書きフラグ ] )
引数で指定されたファイルを作成して、作成されたファイルの TextStreamオブジェクトを戻り値とします。 第2引数で Falseとした場合、既にあるファイルの上書きは行いません。既定値は True です。 [ Sample ] [ D:\wwwroot\count.dat ] という名称のブランクファイルを作成します。
objFSO.CreateTextFile "D:\wwwroot\count.dat"
DeleteFile
FileSystemObject.DeleteFile ファイル名
引数で指定されたファイルを削除します。指定されたファイルがない場合、エラーが発生します。 [ Sample ] CreateTextFileのサンプルで作成したテキストファイルを削除します。
objFSO.DeleteFile "D:\wwwroot\sample.txt"
DriveExists
[ 真/偽 ] = FileSystemObject.DriveExists (ドライブ名)
引数で指定したドライブ(ネットワークドライブも含む)が存在すれば 真、存在しなければを返します。 FileExists
[ 真/偽 ] = FileSystemObject.FileExists (ファイル名)
FileExistsメソッドは 引数で指定したファイルが存在すれば 真、存在しなければを返します。 [ Sample ] "D:\wwwroot\count.dat" が存在しなければ作成します。
Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists("D:\wwwroot\count.dat") = False Then objFSO.CreateTextFile("D:\wwwroot\count.dat") End If Set objFSO = Nothing GetFile
[ Fileオブジェクト ] = FileSystemObject.GetFile (ファイルパス)
引き数で指定したファイルを表す Fileオブジェクトを取得できます。 またFileオブジェクトを変数に受け取ってファイルを操作する事も出来ます。詳しくは続きを見てください。 [ Sample1 ] Fileオブジェクトを取得し、Typeプロパティにて登録されているファイルタイプを表示します。
Response.Write(objFSO.GetFile("C:\Inetpub\wwwroot\sample.htm").Type)
[ Sample2 ] 上のサンプルと全く同じ動作をしますが、こちらは一度 objFLに Fileオブジェクトを受け取ってから操作しています。
Set objFL = objFSO.GetFile("C:\Inetpub\wwwroot\sample.htm") Response.Write(objFL.Type) MoveFile
FileSystemObject.MoveFile 移動元ファイル , 移動先ファイル
元ファイルで指定したファイルを移動先へ移動します。元ファイルが存在しない場合、移動先にアクセスできない場、既に移動先のファイルが存在する場合などはエラーが発生します。コピーメソッドには上書きフラグが存在しましたが移動メソッドに上書きフラグは存在しません。 [ Sample ] "wwwroot" フォルダの "web.gif" ファイルを、子フォルダに移動します。
objFSO.MoveFile "C:\Inetpub\wwwroot\web.gif","C:\Inetpub\wwwroot\sample\web.gif"
OpenTextFile
FileSystemObject.OpenTextFile ファイルパス [, モード [, 作成フラグ [, 起動フォーマット ] ] ]
第1引数で指定したファイルを読み取り、又は追加書き込みモードで開き、そのファイルの TextStreamオブジェクトを返します。 [ Sample ] wwwサービスのルートディレクトリにある "sample.dat" の TextStreamオブジェクトを取得します。
Dim objFSO ' FileSystemObject Dim objTS ' TextStream Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTS = objFSO.OpenTextFile(Server.MapPath("/sample.dat"),8 ,True) '〜 テクストストリームに対する操作を記述 〜 Set objTS = Nothing Set objFSO = Nothing OpenTextFileメソッドの3番目の引数で "8" を指定しています。これにより、そのファイルが存在しなくても、スクリプト側で自動的に作成して TextStream オブジェクトを取得する事が出来ます。 もう一つ注意したいのは、このサンプルで Server.MapPath メソッドを使用していることです。このメソッドは「 仮想パス → 物理 」パスの変換を行ってくれるメソッドです。 OpenTextStream メソッドでは "/Sample.dat" と記述してもエラーにはなりませんが、それは wwwサービスのルートディレクトリにファイルを作成してくれるという事ではありません。そこで、Server.MapPath メソッドにて www サーバビスルートディレクトリの物理パスを取得しているのです。 ファイル操作Fileオブジェクト
FileSystemObject.GetFile メソッド を使用して取得する File オブジェクトの メソッド/プロパティ、またそれぞれの使い方を紹介していきます。 Fileオブジェクトではテキストファイルに書き込んだりする操作は行ないません。これらの操作については TextStreamオブジェクト をご参照ください。 File オブジェクトの メソッド/プロパティ
ファイルサイズを取得する ファイルサイズの取得にはフォルダのサイズ取得方法と同じく Sizeメソッドを使用します。 このメソッドはファイルサイズをバイト単位で返します。
Dim objFSO Dim objFIL Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFIL = objFSO.GetFile("C:\Inetpub\wwwroot\sample.txt") Set objFIL = Nothing Set objFSO = Nothing ファイルの最終更新日を取得する ファイルの最終更新日は DateLastModifiedメソッドで取得します。このサンプルのような使い方をすると "2002/11/10 1:26:20" という形式で出力します。戻り値は Dateオブジェクトとなるので、各プロパティを参照して任意の形式を取得することも出来ます。
Dim objFSO Dim objFIL Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFIL = objFSO.GetFile("C:\Inetpub\wwwroot\sample.txt") Response.Write(objFIL.DateLastModified) Set objFIL = Nothing Set objFSO = Nothing ファイルの複製を作成する ファイルの複製を作成します。 FileSystemObject の Copyメソッドでは、コピー元、コピー先を引き数として指定しましたが、Fileオブジェクトでは対象のファイルがコピー元となるためコピー元は指定せず、コピー先/上書きフラグを指定します。
Dim objFSO Dim objFIL Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFIL = objFSO.GetFile("C:\Inetpub\wwwroot\sample.txt") objFIL.Copy "C:\Inetpub\wwwroot\Sample2.txt", True Set objFIL = Nothing Set objFSO = Nothing テキストストリームの使い方TextStreamオブジェクト
TextStreamオブジェクトはテキストファイルにデータを書き込んだり、テキストファイルの読み込んだりする メソッド/プロパティを用意してくれています。 ASP からテキストデータを操作するために非常に良く使用するオブジェクトの一つです。 TextStream オブジェクトの メソッド/プロパティ
ファイルの読み込み このサンプルは C:\Inetpub\wwwroot\sample.txt の内容を全て出力します。 今回は まず FileSystemObject.OpenTextFile メソッドを使用して TextStreamオブジェクトを取得します。 次に Do Until ステートメントで繰り返し処理を行ないますが、この時終了条件を AtEndOfStream プロパティが True になるまでと設定しています。AtEndOfStream はテキストストリームから全てのデータを読み込んだ時に True を返すプロパティです。 このサンプルではファイルから ReadLine メソッドを使用してデータを一行ずつ読み込んでいます。ReadLine メソッドは一行単位でテキストストリームからデータを取得して戻り値として返します。
Dim objFSO Dim objTS Dim strWk Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTS = objFSO.OpenTextFile("C:\Inetpub\wwwroot\sample.txt",1 ,True) Do Until objTS.AtEndOfStream = True strWk = objTS.ReadLine Response.Write(strWk & "<br>") Loop objTS.Close Set objTS = Nothing Set objFSO = Nothing ファイルの書き込み このサンプルは C:\Inetpub\wwwroot\sample.txt へ "書き込みデータ" の文字列を出力します。 今回は まず FileSystemObject.OpenTextFile メソッドを使用して TextStreamオブジェクトを書き込み専用で取得します。書き込み専用モードなので、既存データは書き込みデータに上書かれます。 データの書き込みは Write メソッドを使用します。このメソッドは第一引き数に指定された文字列をテキストストリームへ出力します。
Dim objFSO Dim objTS Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTS = objFSO.OpenTextFile("C:\Inetpub\wwwroot\sample.txt",2 ,True) objTS.Write("書き込みデータ") objTS.Close Set objTS = Nothing Set objFSO = Nothing |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||