tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
ディレクトリのサイズを取得する ( No.0 )  [親スレッドへ]
日時: 2021/03/18 10:17
名前: 魔界の仮面弁士

***********************************************************************************
* カテゴリー:[フォルダー][ファイル][ディレクトリ]
* キーワード:ディレクトリ内のファイルの総容量,フォルダー内のファイルの総容量,ファイルサイズ,
***********************************************************************************
元ネタ: http://hanatyan.sakura.ne.jp/dotnet/file07.htm

下位のディレクトリを高速に走査できるよう、並列プログラミングとして組み込んでみました。
アクセス権が無い場所はスキップされます。

.NET 6.0 および .NET 5.0 で動作確認。

Imports System
Imports System.IO
Imports System.Threading
Imports System.Runtime.CompilerServices

Public Module DirectoryInfoExtensions
    <Extension>
    Public Function GetDirectorySize(this As DirectoryInfo) As Long
        Dim directorySize = 0L
        If Not If(this?.Exists, False) Then
            Return directorySize
        End If
        Dim eo As New EnumerationOptions With {
            .AttributesToSkip = FileAttributes.ReparsePoint Or FileAttributes.Offline Or FileAttributes.Device,
            .IgnoreInaccessible = True,
            .RecurseSubdirectories = False,
            .ReturnSpecialDirectories = False
        }
        For Each fileInfo In this.EnumerateFiles("*", eo)
            Interlocked.Add(directorySize, fileInfo.Length)
        Next
        Parallel.ForEach(this.EnumerateDirectories("*", eo), Sub(d) Interlocked.Add(directorySize, GetDirectorySize(d)))
        Return directorySize
    End Function
End Module

Module Program
    Sub Main()
        Dim d As New DirectoryInfo("C:\Program Files")
        Console.WriteLine(d.FullName)
        Console.WriteLine($"{d.GetDirectorySize():N0} Bytes")
        Console.ReadKey()
    End Sub
End Module



 [スレッド一覧へ] [親スレッドへ]