ドライブとフォルダの操作

FileSystemObject (FSO) オブジェクト モデルでは、ドライブとフォルダをプログラムから操作できます。Windows エクスプローラで対話的に処理するのと同じように、フォルダのコピーおよび移動、ドライブおよびフォルダの情報の取得などを実行できます。

ドライブの情報を取得する

Drive オブジェクトでは、ドライブが物理的に接続されているかネットワーク経由であるかに関係なく、システムに接続された各種のドライブについての情報を取得することができます。Drive オブジェクトのプロパティによって、次の情報を取得できます。

  • バイト単位によるドライブの合計サイズ (TotalSize プロパティ)
  • バイト単位によるドライブの空き容量 (AvailableSpace プロパティまたは FreeSpace プロパティ)
  • 割り当てられているドライブ文字 (DriveLetter プロパティ)
  • ドライブの種類。リムーバブル、固定式、ネットワーク、CD-ROM、RAM ディスクなど (DriveType プロパティ)
  • ドライブのシリアル番号 (SerialNumber プロパティ)
  • ドライブが使用するファイル システム。FAT、FAT32、NTFS など (FileSystem プロパティ)
  • ドライブを使用できるかどうか (IsReady プロパティ)
  • 共有名とボリューム名の一方または両方 (ShareName プロパティと VolumeName プロパティ)
  • ドライブのパスまたはルート フォルダ (Path プロパティと RootFolder プロパティ)

サンプル コードを参照すれば、これらのプロパティが FileSystemObject でどのように使用されているかを確認できます。

Drive オブジェクトの使用例

Drive オブジェクトを使用して、ドライブの情報を収集します。次のコードでは、実際の Drive オブジェクトを参照していません。代わりに GetDrive メソッドを使って既存の Drive オブジェクト (ここでは drv) に対する参照を取得しています。

次の例は、Drive オブジェクトを使用する方法を示します。

    Sub ShowDriveInfo(drvPath)
       Dim fso, drv, s
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
       s = "ドライブ " & UCase(drvPath) & " - "
       s = s & drv.VolumeName & "<BR>"
       s = s & "合計サイズ: " & FormatNumber(drv.TotalSize / 1024, 0)
       s = s & " KB" & "<BR>"
       s = s & "空き領域: " & FormatNumber(drv.FreeSpace / 1024, 0)
       s = s & " KB" & "<<BR>"
       Response.Write s
    End Sub
    [JScript]
    function ShowDriveInfo1(drvPath)
    {
       var fso, drv, s ="";
       fso = new ActiveXObject("Scripting.FileSystemObject");
       drv = fso.GetDrive(fso.GetDriveName(drvPath));
       s += "ドライブ " + drvPath.toUpperCase()+ " - ";
       s += drv.VolumeName + "<br>";
       s += "合計サイズ: " + drv.TotalSize / 1024;
       s += " KB" + "<BR>";
       s += "空き領域: " + drv.FreeSpace / 1024;
       s += " KB" + "<BR>";
       Response.Write(s);
    }

フォルダを操作する

フォルダの一般的な処理とそれを実行するメソッドを、次の表に示します。

処理 メソッド
フォルダを作成する FileSystemObject.CreateFolder
フォルダを削除する Folder.Delete または FileSystemObject.DeleteFolder
フォルダを移動する Folder.Move または FileSystemObject.MoveFolder
フォルダをコピーする Folder.Copy または FileSystemObject.CopyFolder
フォルダ名を取得する Folder.Name
ドライブに存在するフォルダを検出する FileSystemObject.FolderExists
既存の Folder オブジェクトのインスタンスを取得する FileSystemObject.GetFolder
フォルダの親フォルダの名前を検索する FileSystemObject.GetParentFolderName
システム フォルダのパスを検索する FileSystemObject.GetSpecialFolder

サンプル コードを参照すれば、これらのメソッドおよびプロパティが FileSystemObject でどのように使用されているかを確認できます。

次の例では、Folder オブジェクトおよび FileSystemObject オブジェクトを使ってフォルダを操作し、フォルダの情報を取得する方法を示します。

    Sub ShowFolderInfo()
       Dim fso, fldr, s
       ' FileSystemObject オブジェクトのインスタンスを取得します。
       Set fso = CreateObject("Scripting.FileSystemObject")
       ' Drive オブジェクトを取得します。
       Set fldr = fso.GetFolder("c:")
       ' 親フォルダの名前を表示します。
       Response.Write "親フォルダの名前:" & fldr & "<BR>"
       ' ドライブの名前を表示します。
       Response.Write "格納されているドライブ " & fldr.Drive & "<BR>"
       ' ルート ファイルの名前を表示します。
       If fldr.IsRootFolder = True Then
          Response.Write "これはルート フォルダです。"& ""<BR>"<BR>"
       Else
          Response.Write "これはルート フォルダではありません。"& "<BR><BR>"
       End If
       ' FileSystemObject オブジェクトでフォルダを作成します。
       fso.CreateFolder ("C:\Bogus")
       Response.Write "作成したフォルダは C:\Bogus です。" & "<BR>"
       ' フォルダのベース名を表示します。
       Response.Write "ベース名 = " & fso.GetBaseName("c:\bogus") & "<BR>"
       ' 作成されたフォルダを削除します。
       fso.DeleteFolder ("C:\Bogus")
       Response.Write "削除したフォルダは C:\Bogus です。" & "<BR>"
    End Sub
    [JScript]
    function ShowFolderInfo()
    {
       var fso, fldr, s = "";
       // FileSystemObject オブジェクトのインスタンスを取得します。
       fso = new ActiveXObject("Scripting.FileSystemObject");
       // Drive オブジェクトを取得します。
       fldr = fso.GetFolder("c:");
       // 親フォルダの名前を表示します。
       Response.Write("親フォルダの名前:" + fldr + "<BR>");
       // ドライブの名前を表示します。
       Response.Write("格納されているドライブ " + fldr.Drive + "<BR>");
       // ルート ファイルの名前を表示します。
       if (fldr.IsRootFolder)
         Response.Write("これはルート フォルダです。");
       else
         Response.Write("これはルート フォルダではありません。");
       Response.Write("<BR><BR>");
       // FileSystemObject オブジェクトでフォルダを作成します。
       fso.CreateFolder ("C:\\Bogus");
       Response.Write("作成したフォルダは C:\\Bogus です。" + "<BR>");
       // フォルダのベース名を表示します。
       Response.Write("ベース名 = " + fso.GetBaseName("c:\\bogus") + "<BR>");
       // 作成されたフォルダを削除します。
       fso.DeleteFolder ("C:\\Bogus");
       Response.Write("削除したフォルダは C:\\Bogus です。" + "<BR>");
    }