Folder Size

From AutoIt Wiki
Revision as of 13:34, 17 November 2012 by IEvKI3gv9Wrkd41u (talk | contribs) (BrokenLinks: Samples, ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Back to Samples

Purpose:

Find the space used by a folder, including subfolders and their files too.

Illustrates:

  • Automation of DOS commands to accomplish a recursive folder scan.
  • Basic use of StringFormat

Notes:

  • Compare this method with Quick Folder Size, which uses a similar method but processes a different DOS command ;o)
  • Compare this method with the builtin Autoit command "DirGetSize"


 ;--------------------------------------------------------------------------------
 ;Example of call to UDF _FolderSize()
 ;--------------------------------------------------------------------------------
     $sFolder = @TempDir
     $nFolderSize = _FolderSize($sFolder)
     If @error then
         ;failed
     Else
         Msgbox (4096 + 32,@ScriptName, StringFormat("Bytes in %s = %d", $sFolder, $nFolderSize))
     Endif
 
 
 Func _FolderSize($psFolder)
 ;--------------------------------------------------------------------------------
 ;Uses the DOS "dir" command to recursively collect all filenames
 ;in a folder and its children; then adds up the filesize for each one
 ;and returns the total.
 ;--------------------------------------------------------------------------------
 Local $sFileList, $nFileList, $nTotalSize
 
     $sFileList = "C:\_FolderSize.LST"
     RunWait(@Comspec & " /C DIR """ & $psFolder & "\*.*"" /s/b /A:-D > " & $sFileList,"", @SW_HIDE)
     
     $nFileList = FileOpen($sFileList, 0)  ;0=open
     If $nFileList = -1 then
         ;Couldn't open list of files in designated folder
         SetError(1)
         Return 0
     Endif
 
 ;Read the listfile, and determine file sizes,
 ;writing name and size to CSV file
     $nTotalSize = 0
     While 1
         $sFilePathName = FileReadLine($nFileList)
         if @error = -1 then;EOF
             ExitLoop
         endif
         $nTotalSize = $nTotalSize + FileGetSize($sFilePathName)
     Wend
 
 ;Cleanup
     FileClose($nFileList)
     FileDelete($sFileList)
     
     Return $nTotalSize
     
 EndFunc