2016-02-01 53 views
-1

我有一個列表視圖顯示文件夾和文件,我可以顯示文件和子文件夾的大小,但我怎麼用子做只是不包括父/根文件夾。得到一個子文件夾/子目錄的大小exlcuding父文件

編輯

一樣,如果Folder1的大小是10 MB,它有一個SubFolder20 MB大小,總的30 MB,它應該只得到SubFolder這是20 MB顯示內容時的大小的Folder1ListView

Public Shared Function DirSize(ByVal d As DirectoryInfo) As Long 
    Dim Size As Long = 0 

    Dim dis As DirectoryInfo() = d.GetDirectories() 
    Dim di As DirectoryInfo 
    For Each di In dis 
     Size += DirSize(di) 
    Next di 
    Return Size 
End Function 

我的列表視圖代碼:

Sub lv1items() 
    ListView1.Items.Clear() 
    Dim fPath As String = Form2.TextBox1.Text 
    Dim di = New DirectoryInfo(fPath) 

    ' store imagelist index for known/found file types 
    Dim exts As New Dictionary(Of String, Int32) 

    If di.Exists = False Then 
     MessageBox.Show("Destination path" & " " & Form2.TextBox1.Text & " is not found.", "Directory Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error) 
     Form2.Show() 
    Else 
     Dim img As Image 
     Dim lvi As ListViewItem 
     For Each d In di.EnumerateDirectories("*.*", SearchOption.TopDirectoryOnly) 
      lvi = New ListViewItem(d.Name) 
      lvi.SubItems.Add(DirSize(di).ToString("0.00") & " MB") 
      lvi.SubItems.Add(d.CreationTime.Date) 

      ListView1.Items.Add(lvi) 

      img = NativeMethods.GetShellIcon(d.FullName) 
      ImageList1.Images.Add(img) 
      lvi.ImageIndex = ImageList1.Images.Count - 1 
     Next 
End Sub 

它返回一個0大小的文件夾,但它有一個文件中。 enter image description here

一點幫助嗎?

+1

你不得不在屋裏總結文件 - 文件夾本身沒有大小 – Plutonix

+0

@ user2041732。對不起,我沒有注意到這是vb.net。我現在已經解決了我的問題。請檢查一下。 –

+0

我如何做到這一點與子文件夾?我的意思不是我在裏面,在'ListView'中,或不是被聲明爲'DirectoryInfo'的。 – Dhan

回答

2

您可以使用此功能:

Public Function GetDirectorySize(path As String) As Long 
    Dim files() As String = Directory.GetFiles(path, "*", SearchOption.AllDirectories) 
    Dim size As Long = 0 
    For Each file As String In files 
     Dim info As New FileInfo(file) 
     size += info.Length 
    Next 
    Return size 
End Function 

注意這個檢查文件夾及其子目錄中的每個文件的大小。因此保證返回正確的尺寸。

證明了它的工作原理:

根:

enter image description here

子文件夾:

enter image description here

總面積=(1483 + 25315)×1024 = 274411152字節。

程序的輸出:

enter image description here

27440016字節≈274411152個字節。

注意:由於Windows資源管理器取消某些字節以顯示KB,因此存在差異。如果您查看每個文件的屬性並加起來,那麼您將從Explorer和函數中獲得相同的大小。

+0

這段代碼顯示了我在(D:\ Test)裏面的當前文件夾的大小,而不是子文件夾(D:\ Test \ Folds),就像在圖像中一樣。 – Dhan

+0

@ user2041732等待。讓我看看這個。 –

+0

@ user2041732請參閱編輯。它工作得很好:)確保你正確地調用它。 –

相關問題