How to get the folder size using MFT?

Just starting out? Need help? Post your questions and find answers here.
AZJIO
Addict
Addict
Posts: 2143
Joined: Sun May 14, 2017 1:48 am

How to get the folder size using MFT?

Post by AZJIO »

Is it possible to make PureBasic code from this example?
Another example on AutoIt3
User avatar
Mijikai
Addict
Addict
Posts: 1517
Joined: Sun Sep 11, 2016 2:17 pm

Re: How to get the folder size using MFT?

Post by Mijikai »

Yes, looks like straight WinApi to me.

A lazy way:

Code: Select all

EnableExplicit

;NOTE: RUN AS ADMIN!

Enumeration NTFS_INFO
  #NTFS_INFO_SECTOR = 4
  #NTFS_INFO_CLUSTER
  #NTFS_INFO_FREE_CLUSTER
EndEnumeration

Procedure.i FolderSize(Input.s,Index.i)
  Protected task.i
  Protected output.s
  Protected start.i
  Protected stop.i
  task = RunProgram("fsutil.exe","fsinfo ntfsinfo " + Input,#Null$,#PB_Program_Open|#PB_Program_Read)
  If task
    While ProgramRunning(task)
      If AvailableProgramOutput(task)
        output + ReadProgramString(task) + #CR$
      EndIf
    Wend 
    CloseProgram(task) 
  EndIf
  If output
    output = ReplaceString(StringField(output,Index,#CR$)," ","")
    start = FindString(output,":")
    If start
      start + 1
      stop = FindString(output,"(",start)
      output = ReplaceString(Mid(output,start,stop - start),".","")
      ProcedureReturn Val(output)
    EndIf
  EndIf
  ProcedureReturn #Null
EndProcedure

Debug "FolderSize: " + Str(FolderSize("c:",#NTFS_INFO_SECTOR)) + " bytes! - #NTFS_INFO_SECTOR"
Debug "FolderSize: " + Str(FolderSize("c:",#NTFS_INFO_CLUSTER)) + " bytes! - #NTFS_INFO_CLUSTER"
Debug "FolderSize: " + Str(FolderSize("c:",#NTFS_INFO_FREE_CLUSTER)) + " bytes! - #NTFS_INFO_FREE_CLUSTER"

End
Last edited by Mijikai on Sat Aug 21, 2021 6:13 pm, edited 1 time in total.
Post Reply