Что нового

Поиск Максимального размера файла в папке с выводом результата

Bayzet

Новичок
Сообщения
1
Репутация
0
Версия AutoIt 4.2.0
Добрый день, Помогите переделать код что бы помимо адреса и имени файла выводил еще и размер файлов + окно сообщения с именем самого большого файла и его размера. Спасибо

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <array.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 600, 450)
$Edit1 = GUICtrlCreateEdit("", 300, 0, 300, 400)
GUICtrlSetData(-1, "")
$List1 = GUICtrlCreateList("", 0, 0, 300, 400, BitOR($WS_BORDER, $WS_VSCROLL)); Set default style with the exception of $LBS_SORT, which forces alphabetical sorting
$Bfolder = GUICtrlCreateButton("Select Folder To Read File In From", 0, 400, 600, 50)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Bfolder
            $SFolder = FileSelectFolder("Select Folder", "")
            If $SFolder <> '' Then
                If StringRight($SFolder, 1) <> '\' Then $SFolder &= '\'; Add trailing slash if it isn't there
                $AFiles = _FileSearch($SFolder & '*.*', 1, 0, 1, 0)
            Else
                Dim $AFiles[1]
                $AFiles[0] = 0
            EndIf
            If $AFiles[0] <> 0 Then
                Dim $ASize[$AFiles[0]][2]
                For $a = 1 To $AFiles[0]
                    $ASize[$a - 1][0] = FileGetSize($AFiles[$a])
                    $ASize[$a - 1][1] = $AFiles[$a]
                Next
                _ArraySort($ASize)

                ;For Edit
                $SEditString = ''
                For $a = 0 To UBound($ASize) - 1
                    $SEditString &= $ASize[$a][1]
                    If $a <> UBound($ASize) - 1 Then $SEditString &= @CRLF
                Next
                GUICtrlSetData($Edit1, $SEditString)

                ;For List
                $SListString = ''
                For $a = 0 To UBound($ASize) - 1
                    $SListString &= $ASize[$a][1]
                    If $a <> UBound($ASize) - 1 Then $SListString &= '|'
                Next
                GUICtrlSetData($list1, ''); Clear any old data
                GUICtrlSetData($List1, $SListString)
            EndIf
    EndSwitch
WEnd

; ---------File Search Functions----------

; _FileSearch( "Path and Mask", <$nOption>, <$cpusaver>, <$dirfilter>, <$filefilter>)
;
;----PARAMETERS-----
;$nOption -   <Optional (0 - normal, 1- recursive)>
;$cpusaver -  <Optional (0 - normal, 1 - CPU Friendly, but Slower)>
;$dirfilter - <Optional (0 - list directories, 1 - filter out directories)>
;$filefilter- <Optional (0 - list files, 1 - filter out files)>
;
;----RETURN-----
; Returns array. Either Array of files (full path) where...
; Array[0] is number of files.
; Array[0] = 0 if nothing found.
; EXAMPLE USAGE
;--------------------------------------------
;~ #include<array.au3>
;~ $a = _FileSearch("C:\*.*", 1, 0, 0, 0)
;~ _ArrayDisplay($a)
;--------------------------------------------
Func _FileSearch($szMask, $nOption = 0, $cpusaver = 0, $dirfilter = 0, $filefilter = 0)
    $szRoot = ""
    $hFile = 0
    $szBuffer = ""
    $szReturn = ""
    $szPathList = "*"
    Dim $aNULL[1]

    If Not StringInStr($szMask, "\") Then
        $szRoot = @ScriptDir & "\"
    Else
        While StringInStr($szMask, "\")
            $szRoot = $szRoot & StringLeft($szMask, StringInStr($szMask, "\"))
            $szMask = StringTrimLeft($szMask, StringInStr($szMask, "\"))
        WEnd
    EndIf
    If $nOption = 0 Then
        _FileSearchUtil($szRoot, $szMask, $szReturn, $cpusaver, $dirfilter, $filefilter)
    Else
        While 1
            $hFile = FileFindFirstFile($szRoot & "*.*")
            If $hFile >= 0 Then
                $szBuffer = FileFindNextFile($hFile)
                While Not @error
                    If $szBuffer <> "." And $szBuffer <> ".." And _
                            StringInStr(FileGetAttrib($szRoot & $szBuffer), "D") Then _
                            $szPathList = $szPathList & $szRoot & $szBuffer & "*"
                    $szBuffer = FileFindNextFile($hFile)
                WEnd
                FileClose($hFile)
            EndIf
            _FileSearchUtil($szRoot, $szMask, $szReturn, $cpusaver, $dirfilter, $filefilter)
            If $szPathList == "*" Then ExitLoop
            $szPathList = StringTrimLeft($szPathList, 1)
            $szRoot = StringLeft($szPathList, StringInStr($szPathList, "*") - 1) & "\"
            $szPathList = StringTrimLeft($szPathList, StringInStr($szPathList, "*") - 1)
        WEnd
    EndIf
    If $szReturn = "" Then
        $aNULL[0] = 0
        Return $aNULL
    Else
        Return StringSplit(StringTrimRight($szReturn, 1), "*")
    EndIf
EndFunc   ;==>_FileSearch

Func _FileSearchUtil(ByRef $ROOT, ByRef $MASK, ByRef $RETURN, $cpusaver, $dirfilter, $filefilter)
    $hFile = FileFindFirstFile($ROOT & $MASK)
    If $hFile >= 0 Then
        $szBuffer = FileFindNextFile($hFile)
        While Not @error
            If $cpusaver = 1 Then Sleep(1) ;OPTIONAL FOR CPU SAKE
            If $szBuffer <> "." And $szBuffer <> ".." Then
                If StringInStr(FileGetAttrib($ROOT & $szBuffer), "D") Then
                    If $dirfilter = 0 Then $RETURN = $RETURN & $ROOT & $szBuffer & "*"
                Else
                    If $filefilter = 0 Then $RETURN = $RETURN & $ROOT & $szBuffer & "*"
                EndIf
            EndIf
            $szBuffer = FileFindNextFile($hFile)
        WEnd
        FileClose($hFile)
    EndIf
EndFunc   ;==>_FileSearchUtil
 
Верх