Решил добавить прогресс бар для операции Copy /b. Написал тестовый скрипт:
Но индикатор прогресса ведет себя очень странно. Немного подвинется и стоит пока файл не создастся полностью и скрипт не закроется.
Если при работе скрипта открыть папку с создаваемым файлом в ТС и нажимать клавишу F2 (Обновить) в ТС, то видно, что размер файла растет и при этом прогресс тоже движется в такт с этими нажатиями.
Видимо FileGetSize не может считать размер у растущего файла без посторонних обращений к этому файлу.
Как заставить нормально работать скрипт?
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$archive = 'x:\bigArch\Office2003__.7z' ; > 1 ГБ
$module = 'x:\bigArch\7zsd_LZMA2.sfx' ; ~ 100 КБ
$config = 'x:\bigArch\_Для_скриншотов.txt' ; ~ 10 КБ
$sfx = 'x:\bigArch\Office2003.exe'
FileDelete($sfx)
_Copy_b($module, $config, $archive)
Exit
Func _Copy_b($c1, $c2, $c3)
$allSize = FileGetSize($c1) + FileGetSize($c2) + FileGetSize($c3)
Run(@ComSpec & ' /c Copy /b "' & $c1 & '" + "' & $c2 & '" + "' & $c3 & '" "' & $sfx & '"', '', @SW_HIDE)
GUICreate("Запись на диск " & $allSize & ' байт', 205, 67, 5, 5, $WS_BORDER)
$hProgress = GUICtrlCreateProgress(10, 10, 180, 20)
GUISetState(@SW_SHOW)
While 1
$size = FileGetSize($sfx)
If $size = $allSize Then ExitLoop
$persent = Round($size * 100 / $allSize)
GUICtrlSetData($hProgress, $persent)
Sleep(10)
WEnd
GUIDelete()
EndFunc ;==> _Copy_b()
Но индикатор прогресса ведет себя очень странно. Немного подвинется и стоит пока файл не создастся полностью и скрипт не закроется.
Если при работе скрипта открыть папку с создаваемым файлом в ТС и нажимать клавишу F2 (Обновить) в ТС, то видно, что размер файла растет и при этом прогресс тоже движется в такт с этими нажатиями.
Видимо FileGetSize не может считать размер у растущего файла без посторонних обращений к этому файлу.
Как заставить нормально работать скрипт?