- 日時: 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
|