tagCANDY CGI VBレスキュー(花ちゃん) - ディレクトリのサイズを取得する - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
ディレクトリのサイズを取得する
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

ディレクトリのサイズを取得する [No.346の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.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
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ