PDA

View Full Version : حرفه ای: بدست آوردن Size on disk یه پوشه



SlowCode
سه شنبه 01 اسفند 1391, 20:46 عصر
سلام دوستان
به نظر شما چطوری Size on disk یه پوشه رو بدست بیاریم؟
چیزی که به ذهنم میرسه اینه که حجم کل فایلهای داخل پوشه رو ضرب در BytesPerSector کنیم!
این روش درسته؟
اگر هم درست باشه سرعتش خیلی کمه! چون حجم پوشه میتونه چند گیگ باشه.
به نظرتون چه روشی بهتره؟

مهرداد صفا
چهارشنبه 02 اسفند 1391, 13:43 عصر
سلام.
یک شی از Scripting.FileSystemObject بسازید و با استفاده از متود GetFolder آن پوشه مورد نظر را به دست بیاورید، حالا خصوصیت Folder.Size نماینده اندازه پوشه است. به این صورت:

Dim folder As Object, FileSystemObject As Object
set FileSystemObject = CreateObject("scripting.FileSystemObject")
set folder = FileSystemObject.GetFolder("E:\temp")
MsgBox(folder.Size)

SlowCode
چهارشنبه 02 اسفند 1391, 15:08 عصر
این کد شما حجم روی دیسک رو نشون نمیده! ببین مثلا یه پوشه ای داریم حجمش 610 مگ هست و حجم رو دیسکش 615 مگ، اینی که شما گفتی 610 رو نشون میده ولی من میخوام 615 رو بدست بیارم. این کد الان درست کار میکنه:

Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long

Private Sub Form_Load()
GetDiskFreeSpace "C:\", SectorsPerCluster, BytesPerSector, NumberOfFreeClusters, TotalNumberOfClusters
Dim folder As Object, FileSystemObject As Object
Set FileSystemObject = CreateObject("scripting.FileSystemObject")
Set folder = FileSystemObject.GetFolder("C:\new folder")
adition = SectorsPerCluster * BytesPerSector * 1024
MsgBox (folder.Size + adition) / 1024 ^ 2
End
End Sub

فقط میخواستم بدونم راه آسون تری هست یا نه!