目次へ戻ります
VB サンプル


VB ファイル操作

Scripting.FileSystemObject オブジェクト

FileSystemObjectオブジェクトはファイルシステムへアクセスする方法を提供する便利なオブジェクトです。
[参照設定] Microsoft Scripting Runtime (scrrun.dll)

[変数宣言]
     Dim fs As New Scripting.FileSystemObject
     Dim f As File
     Dim fo As Folder
     Dim d As Drive
■FileSystemObject
●CopyFile ファイルのコピー
●DeleteFile ファイルの削除
●FileExists ファイルが存在するかチェック
●MoveFile ファイルの移動
●GetSpecialFolder 特殊フォルダ(Windows,System,Temp)のパス名を取得
●GetTempName 一時ファイル名をランダムに生成
■File
●Attributes ファイルの属性を設定/取得
●DateLastAccessed 最後にアクセスされたときの日付と時刻を取得
●DateLastModified 最後に更新されたときの日付と時刻を取得
●Drive ドライブの名前を取得
●Name ファイルの名前を設定/取得
●ParentFolder ファイルが格納されているフォルダを取得
●Path ファイルのパスを取得
●ShortName 従来の8.3形式のファイル名を取得
●ShortPath 従来の8.3形式のパス名を取得
●Size ファイルサイズを取得
●Type ファイルの種類に関する情報を取得
■Folder
●Attributes フォルダの属性を設定/取得
●DateLastAccessed 最後にアクセスされたときの日付と時刻を取得
●DateLastModified 最後に更新されたときの日付と時刻を取得
●IsRootFolder フォルダがルートフォルダかどうか
●Name フォルダの名前を設定/取得
●ParentFolder フォルダが格納されているフォルダを取得
●Path フォルダのパスを取得
●ShortName 従来の8.3形式のフォルダ名を取得
●ShortPath 従来の8.3形式のパス名を取得
●Size フォルダ内のすべてのファイル合計サイズを取得
●Type フォルダの種類に関する情報を取得
■Drive
●AvailableSpace 使用できるディスク容量を取得
●DriveLetter ドライブ名を取得
●DriveType ドライブの種類を取得
●FileSystem ファイルシステムの種類を取得
●FreeSpace 使用できるディスクの空き境域を取得
●IsReady ドライブの準備ができているかどうか
●Path ドライブのパスを取得
●RootFolder ドライブのルートフォルダを取得
●SerialNumber ディスクボリュームを一意に識別するシリアル番号を取得
●ShareName ドライブのネットワーク共有名を取得
●TotalSize ドライブの総容量を取得
●VolumeName ドライブのボリューム名を設定/取得
【サンプルリスト】

Private Sub Sample()

  Dim fs As New Scripting.FileSystemObject

  'ファイルを移動する1
  If (fs.FileExists("c:\work\test.txt")) Then        'コピー元ファイルあり
     fs.CopyFile "c:\work\test.txt", "c:\temp\"      '上書きファイルコピー
     fs.DeleteFile "c:\work\test.txt", True          'コピー元ファイル削除
  End If

  'ファイルを移動する2
  If (fs.FileExists("c:\work\test1.txt")) Then       '移動元ファイルあり
     If (fs.FileExists("c:\temp\test1.txt")) Then    '移動先ファイルあり
        fs.DeleteFile "c:\temp\test1.txt", True      '移動先ファイル削除
     End If
     fs.MoveFile "c:\work\test1.txt", "c:\temp\"     'ファイル移動
  End If

End Sub
●CopyFile メソッド   [MSDN]

【機能】ファイルを別の場所へコピーします。

【書式】fs.CopyFile コピー元 , コピー先 [,上書きモード]
上書きモード True : 同名ファイルがあれば、上書きする。(デフォルト)
False: 同名ファイルがあれば、上書きしない。

【 例 】
 fs.CopyFile "c:\work\test.txt" , "c:\temp\test.txt"
 fs.CopyFile "c:\work\test.txt" , "c:\temp\"
 fs.CopyFile "c:\work\*.txt" , "c:\temp\"
 fs.CopyFile "c:\work\*.txt" , "c:\temp"

※ コピー元のファイルが存在しなければ、エラーが発生します。
※ 上書きしないの指定でコピー先に同名のファイルが存在した場合は、エラーが発生します。
※ コピー先に同名の読取専用ファイルが存在した場合は、エラーが発生します。
●DeleteFile メソッド   [MSDN]

【機能】指定されたファイルを削除します。

【書式】fs.DeleteFile コピー元 , コピー先 [,削除モード]
削除モード True : 読取専用ファイルも削除する。
False: 読取専用ファイルは削除しない。(デフォルト)

【 例 】
 fs.DeleteFile "c:\work\test.txt" , True
 fs.DeleteFile "c:\work\test*" , True
 fs.DeleteFile "c:\work\*" , True

※ 指定ファイルが存在しなければ、エラーが発生します。
※ 読取専用ファイルは削除しないの指定で読取専用ファイルを削除しようとした場合は、エラーが発生します。
●FileExists メソッド   [MSDN]

【機能】ファイルが存在するかどうかを返します。

【書式】result = fs.FileExists ( ファイル名 )

【戻り値】
True 存在する。
False 存在しない。

【 例 】
 result = fs.FileExists ( "test.txt" )
 result = fs.FileExists ( "c:\work\test.txt" )
 result = fs.FileExists ( "..\test.txt" )

※ パスを指定しなければカレントフォルダを調べます。
●MoveFile メソッド   [MSDN]

【機能】ファイルを別の場所へ移動します。

【書式】fs.MoveFile 移動元 , 移動先

【例】
 fs.MoveFile "c:\work\test.txt" , "c:\temp\test.txt"
 fs.MoveFile "c:\work\test.txt" , "c:\temp\"
 fs.MoveFile "c:\work\*.txt" , "c:\temp\"
 fs.MoveFile "c:\work\*.txt" , "c:\temp"

※ 移動元のファイルが存在しなければ、エラーが発生します。
※ 移動先に同名のファイルが存在した場合は、エラーが発生します。
●GetSpecialFolder メソッド   [MSDN]

【機能】指定した特殊フォルダ(Windows,System,Temp)を返します。

【書式】result = fs.GetSpecialFolder (特殊フォルダの種類)

    
WindowsFolder 0 Windowsフォルダが返されます。
SystemFolder 1 Systemフォルダが返されます。
TemporaryFolder 2 Tempフォルダが返されます。このパスは、環境変数 TMP より取得します。

【 例 】
 result = fs.GetSpecialFolder(WindowsFolder)
 result = fs.GetSpecialFolder(SystemFolder)
 result = fs.GetSpecialFolder(TemporaryFolder)
●GetTempName メソッド   [MSDN]

【機能】一時ファイル名をランダムに生成して返します。

【書式】result = fs.GetTempName

【例】
 result = fs.GetTempName

【実行例】
 rad20591.tmp
 rad63202.tmp
 radB1C61.tmp
●Attributesプロパティ   [MSDN]

【機能】 ファイルまたはフォルダの属性を設定します。値の取得も可能です。
【書式】 result = f.Attributes
f.Attributes = newattributes

newattributes : 複数の定数を組み合わせて、値の和を指定することもできます。
Normal 0 標準ファイル。どの属性も設定されません。
ReadOnly 1 読み取り専用ファイル。この属性は、値の取得も設定も可能です。
Hidden 2 隠しファイル。この属性は、値の取得も設定も可能です。
System 4 システム ファイル。この属性は、値の取得も設定も可能です。
Volume 8 ディスク ドライブ ボリューム ラベル。この属性は、値の取得のみ可能です。
Directory 16 フォルダまたはディレクトリ。この属性は、値の取得のみ可能です。
Archive 32 ファイルが前回のバックアップ以降に変更されているかどうか。
この属性は、値の取得も設定も可能です。
Alias 64 リンクまたはショートカット。この属性は、値の取得のみ可能です。
Compressed 128 圧縮ファイル。この属性は、値の取得のみ可能です。
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("C:\TEST\SAMPLE.TXT")
f.Attributes = f.Attributes - Archive 'ファイル属性の変更
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\")
Debug.Print fo.Attributes 'フォルダ属性
●DateLastAccessedプロパティ   [MSDN]

【機能】 最後にアクセスされたときの日付と時刻を返します。
【書式】 result = f.DateLastAccessed
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("C:\TEST\SAMPLE.TXT")
Debug.Print f.DateLastAccessed 'ファイルの最終アクセス日付
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\")
Debug.Print fo.DateLastAccessed 'フォルダの最終アクセス日付
●DateLastModifiedプロパティ   [MSDN]

【機能】 最後に更新されたときの日付と時刻を返します。
【書式】 result = f.DateLastModified
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("C:\TEST\SAMPLE.TXT")
Debug.Print f.DateLastModified 'ファイルの最終更新日付
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\")
Debug.Print fo.DateLastModified 'フォルダの最終更新日付
●Driveプロパティ   [MSDN]

【機能】 指定されたファイルまたはフォルダが格納されているドライブの名前を返します。
【書式】 result = f.Drive
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("C:\TEST\SAMPLE.TXT")
Debug.Print f.Drive 'ファイルのドライブの名前(Ex:"C:")
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\")
Debug.Print fo.Drive 'フォルダのドライブの名前(Ex:"C:")
●Nameプロパティ   [MSDN]

【機能】 指定されたファイルまたはフォルダの名前を設定します。値の取得も可能です。
【書式】 result = f.Name
f.Name = newname
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("C:\TEST\SAMPLE.TXT")
Debug.Print f.Name 'ファイル名(Ex:"SAMPLE.TXT")
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\WORK\")
Debug.Print fo.Name 'フォルダ名(Ex:"WORK")
●ParentFolderプロパティ   [MSDN]

【機能】 指定されたファイルまたはフォルダが格納されているフォルダを表す Folder オブジェクトを返します。値の取得のみ可能です。
【書式】 result = f.ParentFolder
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("..\SAMPLE.TXT")
Debug.Print f.ParentFolder 'ファイルのフォルダ名(Ex:"C:\TEST\WORK")
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\WORK\")
Debug.Print fo.ParentFolder '親フォルダ名(Ex:"C:\TEST")
●Pathプロパティ   [MSDN]

【機能】 指定されたファイル、フォルダ、またはドライブのパスを返します。
【書式】 result = f.Path
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("..\SAMPLE.TXT")
Debug.Print f.Path 'ファイルのパス(Ex:"C:\TEST\SAMPLE.TXT")
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\")
Debug.Print fo.Path 'フォルダのパス(Ex:"C:\TEST")
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.Path 'ドライブのパス(Ex:"C:")
●ShortNameプロパティ   [MSDN]

【機能】 従来の 8.3 形式のファイル名が必要なプログラムのために、短いファイル名を返します。
【書式】 result = f.ShortName
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("C:\TEST\SAMPLESAMPLE.TXT")
Debug.Print f.ShortName 'ファイル名(Ex:"SAMPLE~1.TXT")
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\Program Files\Common Files\")
Debug.Print fo.ShortName 'フォルダ名(Ex:"COMMON~1")
●ShortPathプロパティ   [MSDN]

【機能】 従来の 8.3 形式のファイル名が必要なプログラムのために、短いパス名を返します。
【書式】 result = f.ShortPath
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("C:\Program Files\SAMPLESAMPLE.TXT")
Debug.Print f.ShortPath 'パス名(Ex:"C:\PROGRA~1\SAMPLE~1.TXT")
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\Program Files\Common Files\")
Debug.Print fo.ShortPath 'パス名(Ex:"C:\PROGRA~1\COMMON~1")
●Sizeプロパティ   [MSDN]

【機能】 ファイルの場合、指定されたファイルのバイト単位のサイズを返します。フォルダの場合、指定されたフォルダ内のすべてのファイルおよびフォルダの合計サイズをバイト単位で返します。
【書式】 result = f.Size
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("C:\TEST\SAMPLE.TXT")
Debug.Print f.Size 'ファイルサイズ
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\")
Debug.Print fo.Size 'フォルダ内のファイルサイズ合計
●Typeプロパティ   [MSDN]

【機能】 ファイルまたはフォルダの種類に関する情報を返します。たとえば、名前が .TXT の拡張子で終わるファイルの場合なら、"テキスト文書" という文字列が返されます。
【書式】 result = f.Type
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim f As File
Set f = fs.GetFile("C:\TEST\SAMPLE.TXT")
Debug.Print f.Type 'ファイル情報(Ex:"テキスト ドキュメント")
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\")
Debug.Print fo.Type 'フォルダ情報(Ex:"ファイル フォルダ")
●IsRootFolderプロパティ   [MSDN]

【機能】 指定されたフォルダがルートフォルダの場合は、真 (true) を返します。ルートフォルダでなければ、偽 (false) を返します。
【書式】 result = fo.IsRootFolder
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim fo As Folder
Set fo = fs.GetFolder("C:\TEST\")
If (fo.IsRootFolder) Then
  MsgBox "ルートフォルダです。"
End If
●AvailableSpaceプロパティ   [MSDN]

【機能】 指定されたドライブまたはネットワーク共有でユーザーが使用できるディスク容量を返します。
【書式】 result = d.AvailableSpace
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.AvailableSpace '空き容量(バイト)
●DriveLetterプロパティ   [MSDN]

【機能】 物理ローカル ドライブまたはネットワーク共有のドライブ名を返します。
【書式】 result = d.DriveLetter
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.DriveLetter 'ドライブ名(Ex:"C")

※ 指定したドライブにドライブ名が関連付けられていなかった場合はヌルストリング("") が返ります。
●DriveTypeプロパティ   [MSDN]

【機能】 ドライブの種類を示す値を返します。
【書式】 result = d.DriveType

0 : 不明
1 : リムーバブル ディスク
2 : ハード ディスク
3 : ネットワーク ドライブ
4 : CD-ROM
5 : RAM ディスク
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.DriveType 'ドライブの種類(0〜5)
●FileSystemプロパティ   [MSDN]

【機能】 ファイル システムの種類を返します。
【書式】 result = d.FileSystem
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.FileSystem 'ドライブの種類("FAT","NTFS","CDFS")
●FreeSpaceプロパティ   [MSDN]

【機能】 使用できるディスクの空き境域を返します。
【書式】 result = d.FreeSpace
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.FreeSpace 'ディスクの空き境域

※ FreeSpaceプロパティは AvailableSpaceプロパティと同じ値を返します。これらの 2つの値が異なる可能性があるのは、ディスククォータ機能をサポートしている場合です。
●IsReadyプロパティ   [MSDN]

【機能】 ドライブの準備ができている場合は真 (true) を返します。準備ができてない場合は偽 (false) を返します。
【書式】 result = d.IsReady
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("A:")
If (Not d.IsReady) Then
  MsgBox "ドライブの準備ができていません。"
End If
●RootFolderプロパティ   [MSDN]

【機能】 指定されたドライブのルートフォルダを表す Folder オブジェクトを返します。値の取得のみ可能です。
【書式】 result = d.RootFolder
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.RootFolder 'ルートフォルダ(Ex:"C:\")
●SerialNumberプロパティ   [MSDN]

【機能】 ディスクボリュームを一意に識別する小数のシリアル番号を返します。
【書式】 result = d.SerialNumber
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.SerialNumber 'シリアル番号

※ SerialNumber プロパティを使用して、リムーバブルメディアのドライブに正しいディスクが挿入されたことを確認できます。
●ShareNameプロパティ   [MSDN]

【機能】 ドライブのネットワーク共有名を返します。
【書式】 result = d.ShareName
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.ShareName 'ネットワーク共有名

※ ネットワークドライブでないドライブを指定すると、ヌルストリング("") が返されます。
●TotalSizeプロパティ   [MSDN]

【機能】 ドライブまたはネットワーク共有の総容量をバイト単位で返します。
【書式】 result = d.TotalSize
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.TotalSize '総容量
●VolumeNameプロパティ   [MSDN]

【機能】 指定されたドライブのボリューム名を設定または返します。値の取得も可能です。
【書式】 result = d.VolumeName
d.VolumeName = newname
【 例 】 Dim fs As New Scripting.FileSystemObject
Dim d As Drive
Set d = fs.GetDrive("C:")
Debug.Print d.VolumeName 'ボリューム名

目次へ戻ります