SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2024 Y.SAK