4.指定のフォルダーのファイル数・サブフォルダー数・総バイト数を取得 |
1.指定のフォルダーのファイル数・サブフォルダー数・総バイト数を取得 2.指定のフォルダー以下の全ファイルを列挙(ファイル数・サブフォルダー数・総バイト数を取得) 3. 4. 5. 6. 7. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:Microsoft Scripting Runtime (scrrun.dll) 参照設定方法参照 使用 API:なし その他 : : |
1.指定のフォルダーのファイル数・サブフォルダー数・総バイト数を取得 |
Option Explicit 'SampleNo=146 2002.06.06 Private Sub Command1_Click() Dim Fso As New FileSystemObject Dim RetValue As Long Dim FolderSize As Double RetValue = Fso.GetFolder("c:\windows").Files.Count Label1.Caption = "ファイルは " & RetValue & " 個有りました。" RetValue = Fso.GetFolder("c:\windows").SubFolders.Count Label2.Caption = "サブフォルダーは " & RetValue & " 個有りました。" '注意 Windows XP とそれ以降の OS では動作が異なりエラーが発生するフォルダーがあります。 On Error Resume Next FolderSize = Fso.GetFolder("c:\windows").Size Label3.Caption = "フォルダーのサイズは " & Format(FolderSize, "#,### バイトです。") If Err.Number <> 0 Then MsgBox "そのフォルダーのサイズは取得できません。" End If End Sub Windows XP 以降では、システムフォルダーとか隠しフォルダー等の特殊なフォルダーの場合、実行時エラー 70 が発生する場合がありますので、そのようなフォルダーを指定する可能性がある場合は、エラー処理を実施して下さい。 尚、上記は、指定フォルダー内のファイル・サブフォルダーが対象になり、サブフォルダー以下のファイル等は含まれません。 |
2.指定のフォルダー以下の全ファイルを列挙(ファイル数・サブフォルダー数・総バイト数を取得) |
Option Explicit Private fSize As Double Private nFile As Long Private nFolder As Long Private Sub Command1_Click() Dim Fso As New FileSystemObject List1.Clear fSize = 0 nFile = 0 nFolder = 0 List1.Visible = False '指定のフォルダーを指定 Call sFolderSearch2(Fso.GetFolder("c:\VBRescu1")) Set Fso = Nothing List1.Visible = True ' MsgBox "ファイルが" & List1.ListCount & "個見つかりました" Debug.Print Format$(fSize, "合計サイズ #,##0 バイト") Debug.Print Format$(nFile, "ファイル数: #,##0 ") Debug.Print Format$(nFolder, "フォルダー数: #,##0 ") End Sub Private Sub sFolderSearch2(ByVal myFolder As Object) 'On Error Resume Next Dim mySubFolder As Folder Dim myFile As File '現在のフォルダー内のファイルを取得 For Each myFile In myFolder.Files '指定の拡張子のファイルを取得する場合 ' If LCase(Right(myFile.Name, 3)) = "xls" Then List1.AddItem myFolder & "\" & myFile.Name nFile = nFile + 1 fSize = fSize + FileLen(myFolder & "\" & myFile.Name) ' End If Next With myFolder 'サブフォルダー数を取得 If .SubFolders.Count > 0 Then For Each mySubFolder In .SubFolders nFolder = nFolder + 1 'サブフォルダーがある場合再帰的に繰り返す Call sFolderSearch2(mySubFolder) Next End If End With Set myFile = Nothing Set mySubFolder = Nothing End Sub 図1.上記実行結果 こちらは、エクスプローラーで確認したファイル数やフォルダー数と同じですが、実行時エラー 70 が発生する場合がありますので1.のサンプル同様、エラー処理を適時追加して下さい。 |
3. |
4. |
5. |
6. |
7. |
検索キーワード及びサンプルコードの別名(機能名) |