Folder Size

From AutoIt Wiki
Revision as of 19:13, 13 May 2008 by 82.36.216.104 (talk)
(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