SAK 図書館
ASP VB Script 基礎編 (その三) ファイルシステムオブジェクト
Active Server Pages(ASP) - VB Script では、標準ファイル I/O は使用できま せん。VB6 の DLL を作成して補うか、以下のファイルシステムオブジェクトを 使用します。(ファイルシステムオブジェクトは、バイナリファイル I/O なし) 尚、以下のコードを VB6 で扱う場合には、session("s3fs") を fs と読み かえて下さい。(dim fs as variant) 【重要】 ・ASP で、FileSystemObject を使用する場合、サーバのウィルスチェックの スクリプト遮断機能が有効になっていると動作しない可能性があります。 うちの環境の場合、FSO のメソッドがハングアップし応答しない状態になり ました。この場合、ウェブサービスを再起動しないことにはサービスが復旧 しません。また、正常に ASP を動作させるためには、サーバのウィルスチ ェックからスクリプト遮断機能を無効にしておく必要があります。 ■ファイルシステムオブジェクトのロード if isempty(session("s3fs")) then Set session("s3fs") = Server.CreateObject("Scripting.FileSystemObject") end if 【補足説明】 ・サイトサービスで初回に一度だけ、ロードされるように isempty() でロー ドの有無をチェックし、ロードされてない場合、application 変数にロード しています。 ・IIS5 では、session("s3fs") でしか使用できないので注意する。 【VB6 での使用】 ・VB6 の場合は、フォームロードなどで、 Set fs = CreateObject("Scripting.FileSystemObject") とだけ記述して使用します。 ■OpenTextFile (ファイルオープン) Set fl = session("s3fs").OpenTextFile(filename, 1, false) | | | | | |_ FALSE 存在しないとき、作成しない | | | | | TRUE 存在しないとき、作成する | | | | |_ 1 読み取り専用 ForReading | | | | 8 追加書き込み ForAppending | | | |_ パス、ファイル名 | | |_ ファイルオープン | |_ ファイルシステムオブジェクト |_ ファイルオブジェクト ■OpenAsTextStream (ファイルオープン) Set fl = f.OpenAsTextStream(1) | | | | |_ 1 読み取り専用 ForReading | | | | 2 追加書き込み ForWriting | | | | 8 追加書き込み ForAppending | | | |_ パス、ファイル名 | | |_ ファイルオープン | |_ ファイルオブジェクト |_ ファイルオブジェクト ■close (ファイルクローズ) fl.close | |_ ファイルクローズ |_ ファイルオブジェクト ■DeleteFile (ファイル削除) session("s3fs").DeleteFile filename, true | | | |_ FALSE 読み取り専用は削除しない | | | TRUE 読み取り専用も削除しない | | |_ パス、ファイル名 | |_ ファイル削除 |_ ファイルシステムオブジェクト ■.Name (ファイル名変更) GetFile メソッドなどの Name プロパティに新たな名前をセットすることで、 ファイル名の変更が行える。 ■FileExists (ファイル存在確認、ファイル存在チェック) rcd = session("s3fs").fileexists(filename) | | | |_ パス、ファイル名 | | |_ ファイル確認 | |_ ファイルシステムオブジェクト |_ TRUE = 存在する FALSE = 存在しない ■Read (テキストファイル読み込み) rec = fl.Read(20) | | |_ 読み込む文字数 | |_ テキストファイルオブジェクト |_ string 変数 ■ReadLine (テキストファイル 1 行読み込み) rec = fl.ReadLine | |_ テキストファイルオブジェクト |_ string 変数 ■ReadAll (テキストファイル全体読み込み) recall = fl.ReadAll | |_ テキストファイルオブジェクト |_ string 変数 ** 一般的には、ReadLine を使用する方が良い。 ■Skip (テキストファイル読み飛ばし) fl.Skip 20 | |_ 読み飛ばす文字数 |_ テキストファイルオブジェクト ■AtEndOfStream (EOF) rcd = fl.AtEndOfStream |_ テキストファイルオブジェクト ** 次に読むものがないと true が返る。 ■Attributes (ファイル属性、フォルダ属性) atr = fl.Attributes | |_ ファイルオブジェクト |_ 属性取得 fl.Attributes = 1 |_ 設定属性 0 Normal 標準ファイル 1 ReadOnly 読み取り専用ファイル(設定も可能) 2 Hidden 隠しファイル(設定も可能) 4 System システムファイル(設定も可能) 8 Volume ボリュームラベル 16 Directory フォルダ 32 Archive バックアップ属性(設定も可能) 64 Alias ショートカット 128 Compressed 圧縮ファイル ■テキストストリーム I/O サンプル 【例1】入力 dim fl, rec if isempty(session("s3fs")) then Set session("s3fs") = Server.CreateObject("Scripting.FileSystemObject") end if Set fl = session("s3fs").OpenTextFile("test.txt", 1, false) do until fl.AtEndOfStream rec = fl.ReadLine loop fl.close 【例2】出力 dim fl, rec if isempty(session("s3fs")) then Set session("s3fs") = Server.CreateObject("Scripting.FileSystemObject") end if Set fl = session("s3fs").CreateTextFile("test.txt", true) fl.WriteLine "abcdefg" fl.WriteLine "あいうえお" fl.close ■FolderExists (フォルダ存在確認、フォルダ存在チェック) rcd = session("s3fs").folderexists(foldername) | | | |_ パス、フォルダ名 | | |_ フォルダ存在確認 | |_ ファイルシステムオブジェクト |_ TRUE = 存在する FALSE = 存在しない ■CreateFolder (フォルダ作成) session("s3fs").CreateFolder foldername | | |_ パス、フォルダ名 | |_ フォルダ作成 |_ ファイルシステムオブジェクト ■GetFolder, files (フォルダオープン) Set f = session("s3fs").GetFolder(path) | | | |_ パス名 | | |_ フォルダ取得 | |_ ファイルシステムオブジェクト |_ フォルダオブジェクト Set fc = f.files | | |_ ファイル取得 | |_ フォルダオブジェクト |_ ファイルオブジェクト ■.Name (フォルダ名変更) GetFolder メソッドなどの Name プロパティに新たな名前をセットすることで、 フォルダ名の変更が行える。 ■フォルダ参照サンプル dim f, fc, fl, fnm if isempty(session("s3fs")) then Set session("s3fs") = Server.CreateObject("Scripting.FileSystemObject") end if Set f = session("s3fs").GetFolder("test") Set fc = f.files For Each fl In fc fnm = fl.Name Next ■ファイルコピー session("s3fs").CopyFile "g:\tmp\a.xls", "g:\tmp\b.xls", TRUE | | | |_ TRUE 上書 | | | FALSE 上書禁止 | | |_ コピー先ファイル | |_ コピー元ファイル |_ ファイルシステムオブジェクト ■ファイル移動 session("s3fs").MoveFile "g:\tmp\a.xls", "g:\tmp\aaa\b.xls" | | | | | | | | |_ 移動先ファイル | |_ 移動元ファイル |_ ファイルシステムオブジェクト ■フォルダコピー session("s3fs").CopyFolder "g:\tmp\", "g:\tmp\aaa\", TRUE | | | |_ TRUE 上書 | | | FALSE 上書禁止 | | |_ コピー先フォルダ | |_ コピー元フォルダ |_ ファイルシステムオブジェクト ■フォルダ移動 session("s3fs").MoveFolder "g:\tmp\", "g:\tmp\aaa\" | | | | | | | | |_ 移動先フォルダ | |_ 移動元フォルダ |_ ファイルシステムオブジェクト ■ドライブ一覧取得(ドライブリスト取得、ドライブ検索) Dim d, dc, s Set dc = session("s3fs").Drives For Each d In dc Select Case d.DriveType Case 1 s = "FPD" Case 4 s = "CD-ROM" Case 3 s = d.ShareName Case Else s = d.VolumeName End Select Print d.DriveLetter & ": " & d.DriveType & " " & s Next ■ドライブ取得 Dim d d = session("s3fs").GetDriveName("g:\tmp\test.txt") ■ドライブ情報取得 Dim d Set d = session("s3fs").GetDrive("c:") msgbox d.VolumeName '** ボリューム名 msgbox d.FreeSpace '** 空き容量 ■特殊フォルダ取得(Windows フォルダ取得など) s = session("s3fs").GetSpecialFolder(0) |_ 0 WindowsFolder Windows フォルダ 1 SystemFolder Windows システムフォルダ 2 TemporaryFolder テンポラリフォルダ ■ファイル日付 set f = fs.GetFile("g:\tmp\test.txt") msgbox f.DateCreated '** ファイル作成日付、時間 msgbox f.DateLastModified '** ファイル更新日付、時間 msgbox f.DateLastAccessed '** ファイルアクセス日付、時間 ** FAT では、DateLastModified の日時が DateCreated でも返る。 FAT32 は知らない。 NTFS では、それぞれ別の日時が正確に返る。 ■注意事項 ・実際のコードでは、必ずエラーチェックやエラー処理を記述する必要があり ます。ASP がエラーで止まるようではセンスに欠けます。 ■ASP VB Script 基礎編資料
■ASP VB Script ADO + SQL 応用編資料
■ASP VB Script oo4o + SQL 応用編資料
■ASP VB Script 基礎実地編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料