Что нового

Посчитать сумму выделенных checkbox и сумму удаленных файлов

Scampy

Новичок
Сообщения
54
Репутация
0
Доброго времени суток!
Помогите дополнить скрипт...
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>

$GUI = GUICreate('123', 535, 390)

$Checkbox1 = GUICtrlCreateCheckbox("Папка C:\1", 20, 50, 110, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Папка C:\2", 20, 70, 110, 17)
$LabelA = GUICtrlCreateLabel("Сумма выделенного:", 20, 130, 170, 12)
$LabelB = GUICtrlCreateLabel("", 135, 130, 170, 12)
$LabelC = GUICtrlCreateLabel("Удалено всего:", 20, 150, 170, 12)
$LabelD = GUICtrlCreateLabel("", 105, 150, 170, 12)
$Button1 = GUICtrlCreateButton("Удалить содержимое", 300, 100, 140)

DateRefreshTrash()
Func DateRefreshTrash()
   $Size1 = Round(DirGetSize("C:\1") / 1048576, 2)
   $Label1 = GUICtrlCreateLabel("" & $Size1 & " Мб", 150, 50, 70, 12)
   $Size2 = Round(DirGetSize("C:\2") / 1048576, 2)
   $Label2 = GUICtrlCreateLabel("" & $Size2 & " Мб", 150, 70, 70, 12)
EndFunc

GUISetState(@SW_SHOW)

While 1
$msg = GUIGetMsg()
   Select
	  Case $msg = $GUI_EVENT_CLOSE
		 ExitLoop
	  Case $msg = $Button1
	  if GUICtrlRead($Checkbox1) = 1 Then
	  $filelist = _FileListToArray("C:\1", '*', 0, True)
		 If Not @error > 0 Then
			For $i = 1 To $filelist[0]
			   $fga = FileGetAttrib($filelist[$i])
				  If StringInStr($fga, 'D') Then
					 DirRemove($filelist[$i], 1)
				  Else
					 FileDelete($filelist[$i])
				  EndIf
			   Next
		 EndIf
	  EndIf
	  if GUICtrlRead($Checkbox2) = 1 Then
	  $filelist = _FileListToArray("C:\2", '*', 0, True)
		 If Not @error > 0 Then
			For $i = 1 To $filelist[0]
			   $fga = FileGetAttrib($filelist[$i])
				  If StringInStr($fga, 'D') Then
					 DirRemove($filelist[$i], 1)
				  Else
					 FileDelete($filelist[$i])
				  EndIf
			   Next
		 EndIf
	  EndIf
   DateRefreshTrash()
	EndSelect
 WEnd


В итоговом варианте будет около 15-20 папок пользователей. Для примера сделал две. Нужно чтобы при выборе checkbox-ов считалась их общая сумма (сумма папок), а при удалении содержимого показывалось сколько всего мегабайт удалилось .
Спасибо
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Перед удалением файла в цикле получите его размер , например
Код:
$razmer+=FileGetSize($filelist[$i])

После выполнения цикла смотрите $razmer. А что значит "сумма папок"? их количество ? Если так, то смотрите
Код:
DirGetSize ( "path" [, flag = 0 ] )
, только с флагом 1-вернёт массив с интересующими Вас данными.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Не пинайте больно , не программист я :smile: может вот так Вы хотели ?
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <File.au3>;


Opt("GUIOnEventMode",1)

$GUI = GUICreate('123', 535, 390)

$Checkbox1 = GUICtrlCreateCheckbox("Папка C:\1", 20, 50, 110, 17)
GUICtrlSetOnEvent ( -1, "Events" )
$Checkbox2 = GUICtrlCreateCheckbox("Папка C:\2", 20, 70, 110, 17)
GUICtrlSetOnEvent ( -1, "Events" )
$LabelA = GUICtrlCreateLabel("Сумма выделенного:", 20, 130, 170, 12)
$LabelB = GUICtrlCreateLabel("", 135, 130, 170, 12)
$LabelC = GUICtrlCreateLabel("Удалено всего:", 20, 150, 170, 12)
$LabelD = GUICtrlCreateLabel("", 105, 150, 170, 12)
$Label1 = GUICtrlCreateLabel("", 150, 50, 70, 12)
$Label2 = GUICtrlCreateLabel("", 150, 70, 70, 12)
$Button1 = GUICtrlCreateButton("Удалить содержимое", 300, 100, 140)
GUICtrlSetOnEvent ( -1, "Events" )

GUISetOnEvent($GUI_EVENT_CLOSE, "Events")
GUISetState(@SW_SHOW)

$Size=0
$DelSize=0


Func Events()
	Select
        Case @GUI_CtrlId = $GUI_EVENT_CLOSE
            Exit
        Case @GUI_CtrlId =$Checkbox1
			  $Size1 = Round(DirGetSize("C:\1") / 1048576, 2)
			if GUICtrlRead($Checkbox1) = 1 Then

			   $Size+=$Size1
               GUICtrlSetData($Label1, $Size1 & " Мб")
			Else
			   $Size-=$Size1
			   GUICtrlSetData($Label1,"")
			EndIf
           GUICtrlSetData($LabelB,$Size&"Мб")

		Case @GUI_CtrlId =$Checkbox2
			$Size2 = Round(DirGetSize("C:\2") / 1048576, 2)
			 if GUICtrlRead($Checkbox2) = 1 Then

               GUICtrlSetData($Label2, $Size2 & " Мб")
			   $Size+=$Size2

			 Else
			   $Size-=$Size2
			   GUICtrlSetData($Label2,"")
			 EndIf

            GUICtrlSetData($LabelB,$Size&"Мб")

        Case @GUI_CtrlId =$Button1
			Delete()


EndSelect
	EndFunc

Func Delete()
	      if GUICtrlRead($Checkbox1) = 1 Then
      $filelist = _FileListToArray("C:\1", '*', 0, True)
         If Not @error > 0 Then
            For $i = 1 To $filelist[0]
               $fga = FileGetAttrib($filelist[$i])
                  If StringInStr($fga, 'D') Then
                     DirRemove($filelist[$i], 1)
				  Else

					 $DelSize+=Round(FileGetSize($filelist[$i]) / 1048576, 2)
                     FileDelete($filelist[$i])
                  EndIf
               Next
         EndIf
      EndIf
      if GUICtrlRead($Checkbox2) = 1 Then
      $filelist = _FileListToArray("C:\2", '*', 0, True)
         If Not @error > 0 Then
            For $i = 1 To $filelist[0]
               $fga = FileGetAttrib($filelist[$i])
                  If StringInStr($fga, 'D') Then
                     DirRemove($filelist[$i], 1)
				  Else
					 $DelSize+=Round(FileGetSize($filelist[$i]) / 1048576, 2)
                     FileDelete($filelist[$i])
                  EndIf
               Next
         EndIf
	  EndIf

	  GUICtrlSetData($LabelD,$DelSize&"Мб")
  ; DateRefreshTrash()



	EndFunc








While 1
Sleep(10)
 WEnd
Код можно и чуток по-проще написать, но я не изменял Ваш алгоритм, а только чуток поправил.
 
Автор
S

Scampy

Новичок
Сообщения
54
Репутация
0
ra4o сказал(а):
Код можно и чуток по-проще написать, но я не изменял Ваш алгоритм, а только чуток поправил.
Отличный вариант! А как по-проще по Вашему? Может он посимпатичнее будет?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,485
Я бы делал так:

Код:
#include <GUIConstantsEx.au3>

Opt('GUIOnEventMode', 1)

;Тут добавляем тексты для Checkbox и пути к папкам [0, 'текст', 'путь:\к\папке']
Global $aCheckBox[2][3] = _
		[ _ ;[CtrlID, Text, File]
			[0, 'Папка C:\1', 'C:\1'], _
			[0, 'Папка C:\2', 'C:\2'] _
		]

$hGUI = GUICreate('Example', 500, 300)

$iTop = 50

For $i = 0 To UBound($aCheckBox) - 1
	$aCheckBox[$i][0] = GUICtrlCreateCheckbox($aCheckBox[$i][1], 20, $iTop, 110, 17)
	GUICtrlSetOnEvent(-1, 'Events')
	$iTop += 20
Next

GUICtrlCreateLabel('Выделено:', 20, 110, 170, 12)
$iCurSize_Lbl = GUICtrlCreateLabel('', 135, 110, 70, 12)
GUICtrlCreateLabel('Сумма выделенного:', 20, 130, 170, 12)
$iSelSize_Lbl = GUICtrlCreateLabel('', 135, 130, 70, 12)
GUICtrlCreateLabel('Удалено всего:', 20, 150, 170, 12)
$iDelSize_Lbl = GUICtrlCreateLabel('', 105, 150, 70, 12)
GUICtrlCreateLabel('Файлов:', 50, 170, 170, 12)
$iDelFiles_Lbl = GUICtrlCreateLabel('', 135, 170, 70, 12)
GUICtrlCreateLabel('Папок:', 50, 190, 170, 12)
$iDelDirs_Lbl = GUICtrlCreateLabel('', 135, 190, 70, 12)

$iDel_Bttn = GUICtrlCreateButton('Удалить содержимое', 300, 100, 140)
GUICtrlSetOnEvent(-1, 'Events')

GUISetOnEvent($GUI_EVENT_CLOSE, 'Events')
GUISetState(@SW_SHOW)

While 1
	Sleep(10)
WEnd

Func Events()
	Switch @GUI_CtrlId
		Case $GUI_EVENT_CLOSE
			Exit
		Case $aCheckBox[0][0] To $aCheckBox[UBound($aCheckBox) - 1][0]
			_Sel_Calc(@GUI_CtrlId)
		Case $iDel_Bttn
			_Sel_Del()
	EndSwitch
EndFunc

Func _Sel_Calc($iCtrlID)
	Local $iSize = 0, $iDirSize
	
	GUICtrlSetData($iCurSize_Lbl, '')
	
	For $i = 0 To UBound($aCheckBox) - 1
		$iDirSize = DirGetSize($aCheckBox[$i][2])
		
		If $iDirSize < 0 Then
			$iDirSize = 0
		EndIf
		
		$iDirSize = Round($iDirSize / 1048576, 2)
		
		If GUICtrlRead($aCheckBox[$i][0]) = $GUI_CHECKED Then
			$iSize += $iDirSize
			
			If $aCheckBox[$i][0] = $iCtrlID Then
				GUICtrlSetData($iCurSize_Lbl, $iDirSize & ' Мб')
			EndIf
		EndIf
	Next
	
	GUICtrlSetData($iSelSize_Lbl, $iSize & ' Мб')
EndFunc

Func _Sel_Del()
	Local $aSize, $iDelSize = 0, $iFiles = 0, $iDirs = 0
	
	For $i = 0 To UBound($aCheckBox) - 1
		If GUICtrlRead($aCheckBox[$i][0]) = $GUI_CHECKED Then
			$aSize = DirGetSize($aCheckBox[$i][2], 1)
			
			If Not IsArray($aSize) Then
				ContinueLoop
			EndIf
			
			$iDelSize += $aSize[0]
			$iFiles += $aSize[1]
			$iDirs += $aSize[2]
			
			DirRemove($aCheckBox[$i][2], 1)
			
			While FileExists($aCheckBox[$i][2])
				Sleep(10)
			WEnd
			
			DirCreate($aCheckBox[$i][2])
		EndIf
	Next
	
	GUICtrlSetData($iDelSize_Lbl, Round($iDelSize / 1048576, 2) & 'Мб')
	GUICtrlSetData($iDelFiles_Lbl, $iFiles)
	GUICtrlSetData($iDelDirs_Lbl, $iDirs)
	
	_Sel_Calc(0)
EndFunc


это посложнее для понимания, но по проще для использования :smile:.
 
Автор
S

Scampy

Новичок
Сообщения
54
Репутация
0
CreatoR сказал(а):
это посложнее для понимания, но по проще для использования :smile:.
Спасибо. Для понимания и правда сложновато ) Не понял только где что еще надо изменить чтоб добавить еще checkbox-ы ниже (помимо ;[CtrlID, Text, File]) и чтобы 3 и 4 были во 2-м столбце. И еще не понял почему не происходит удаление и подсчет если оба пути заменить например на: @TempDir и @WindowsDir & "\Temp"
Спасибо
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,485
Scampy [?]
Не понял только где что еще надо изменить чтоб добавить еще checkbox-ы (помимо ;[CtrlID, Text, File]) чтобы 3 и 4 были во 2-м столбце
Кроме этого ничего менять не нужно, вот вариант без указания числа элементов (3 это постоянно, не меняется):

Код:
Global $aCheckBox[][3] = _
		[ _ ;[CtrlID, Text, File]
			[0, 'Папка C:\1', 'C:\1'], _
			[0, 'Папка C:\2', 'C:\2'], _
			[0, 'Папка C:\3', 'C:\3'] _
		]


тут у последней строки не должно быть запятой.

не понял почему не происходит удаление и подсчет если оба пути заменить например на: @TempDir и @WindowsDir & "\Temp"
Потому что в моём примере сначала удаляется папка целиком, а потом воссоздаётся, с системными папками такое не пройдёт.

Вот немного изменённая версия:
Код:
#include <GUIConstantsEx.au3>

Opt('GUIOnEventMode', 1)

;Тут добавляем тексты для Checkbox и пути к папкам ('текст|путь:\к\папке')
Global $aDirs[] = ['Папка C:\1|C:\1', 'Папка C:\2|C:\2', 'Папка %temp%|' & @TempDir, 'Папка %windir%\temp|' & @WindowsDir & '\temp']

Global $aCheckBox[UBound($aDirs)][3]

For $i = 0 To UBound($aDirs) - 1
	$aText_Dir = StringSplit($aDirs[$i], '|')
	$aCheckBox[$i][0] = 0
	$aCheckBox[$i][1] = $aText_Dir[1]
	$aCheckBox[$i][2] = $aText_Dir[2]
Next

$hGUI = GUICreate('CheckBox Files Calc Example', 500, 300)

;20 - Начальная позиция галочек сверху
;20 - Начальная позиция галочек с лева
;2 - Максимальное число галочек в столбце
;130 - Ширина галочки
;17 - Высота галочки
_Set_CheckBoxes(20, 20, 2, 130, 17)

GUICtrlCreateLabel('Выделено:', 20, 110, 170, 12)
$iCurSize_Lbl = GUICtrlCreateLabel('', 135, 110, 70, 12)
GUICtrlCreateLabel('Сумма выделенного:', 20, 130, 170, 12)
$iSelSize_Lbl = GUICtrlCreateLabel('', 135, 130, 70, 12)
GUICtrlCreateLabel('Удалено всего:', 20, 150, 170, 12)
$iDelSize_Lbl = GUICtrlCreateLabel('', 105, 150, 70, 12)
GUICtrlCreateLabel('Файлов:', 50, 170, 170, 12)
$iDelFiles_Lbl = GUICtrlCreateLabel('', 135, 170, 70, 12)
GUICtrlCreateLabel('Папок:', 50, 190, 170, 12)
$iDelDirs_Lbl = GUICtrlCreateLabel('', 135, 190, 70, 12)

$iDel_Bttn = GUICtrlCreateButton('Удалить содержимое', 300, 100, 140)
GUICtrlSetOnEvent(-1, '_Events')

GUISetOnEvent($GUI_EVENT_CLOSE, '_Events')
GUISetState(@SW_SHOW)

While 1
	Sleep(10)
WEnd

Func _Events()
	Switch @GUI_CtrlId
		Case $GUI_EVENT_CLOSE
			Exit
		Case $aCheckBox[0][0] To $aCheckBox[UBound($aCheckBox) - 1][0]
			_Sel_Calc(@GUI_CtrlId)
		Case $iDel_Bttn
			$iSel = 0
			
			For $i = 0 To UBound($aCheckBox) - 1
				$iSel += Number(GUICtrlRead($aCheckBox[$i][0]) = $GUI_CHECKED)
			Next
			
			If Not $iSel Then
				MsgBox(48, 'Ошибка', 'Выберите папку', 0, $hGUI)
				Return
			EndIf
			
			If MsgBox(256+52, 'Внимание!', 'Вы уверены, очистить выбранные папки?', 0, $hGUI) = 6 Then
				_Sel_Del()
			EndIf
	EndSwitch
EndFunc

;$iTop - Начальная позиция галочек сверху
;$iLeft - Начальная позиция галочек с лева
;$iMaxTop - Максимальное число галочек в столбце
;$iWidth - Ширина галочки
;$iHeight - Высота галочки
Func _Set_CheckBoxes($iTop, $iLeft, $iMaxTop, $iWidth = 110, $iHeight = 17)
	Local $iXTop = $iTop
	Local $iXLeft = $iLeft
	
	For $i = 0 To UBound($aCheckBox) - 1
		$aCheckBox[$i][0] = GUICtrlCreateCheckbox($aCheckBox[$i][1], $iXLeft, $iXTop, $iWidth, $iHeight)
		GUICtrlSetOnEvent(-1, '_Events')
		
		$iXTop += 20
		
		If Mod($i + 1, $iMaxTop) = 0 Then
			$iXTop = $iTop
			$iXLeft += ($iWidth + 20)
		EndIf
	Next
EndFunc

Func _Sel_Calc($iCtrlID)
	Local $iSize = 0, $iDirSize
	
	GUICtrlSetData($iCurSize_Lbl, '')
	
	For $i = 0 To UBound($aCheckBox) - 1
		$iDirSize = DirGetSize($aCheckBox[$i][2])
		
		If $iDirSize < 0 Then
			$iDirSize = 0
		EndIf
		
		$iDirSize = Round($iDirSize / 1048576, 2)
		
		If GUICtrlRead($aCheckBox[$i][0]) = $GUI_CHECKED Then
			$iSize += $iDirSize
			
			If $aCheckBox[$i][0] = $iCtrlID Then
				GUICtrlSetData($iCurSize_Lbl, $iDirSize & ' Мб')
			EndIf
		EndIf
	Next
	
	GUICtrlSetData($iSelSize_Lbl, $iSize & ' Мб')
EndFunc

Func _Sel_Del()
	Local $aSize, $iDelSize = 0, $iFiles = 0, $iDirs = 0
	Local $hSearch, $sFile
	
	For $i = 0 To UBound($aCheckBox) - 1
		If GUICtrlRead($aCheckBox[$i][0]) = $GUI_CHECKED Then
			$aSize = DirGetSize($aCheckBox[$i][2], 1)
			
			If Not IsArray($aSize) Then
				ContinueLoop
			EndIf
			
			$iDelSize += $aSize[0]
			$iFiles += $aSize[1]
			$iDirs += $aSize[2]
			
			$hSearch = FileFindFirstFile($aCheckBox[$i][2] & '\*')
			
			While 1
				$sFile = FileFindNextFile($hSearch)
				If @error Then ExitLoop
				
				If @extended Then
					DirRemove($aCheckBox[$i][2] & '\' & $sFile, 1)
				EndIf
			WEnd
			
			FileClose($hSearch)
			FileDelete($aCheckBox[$i][2] & '\*')
		EndIf
	Next
	
	GUICtrlSetData($iDelSize_Lbl, Round($iDelSize / 1048576, 2) & 'Мб')
	GUICtrlSetData($iDelFiles_Lbl, $iFiles)
	GUICtrlSetData($iDelDirs_Lbl, $iDirs)
	
	_Sel_Calc(0)
EndFunc
 
Автор
S

Scampy

Новичок
Сообщения
54
Репутация
0
CreatoR сказал(а):
Кроме этого ничего менять не нужно, вот вариант без указания числа элементов (3 это постоянно, не меняется):
3 и 4 я имел ввиду про новые чекбоксы если они будут в другом столбце (правее например)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,485
Scampy [?]
3 и 4 я имел ввиду про новые чекбоксы если они будут в другом столбце
Нет, там всегда 3 столбца, я же комментарии специально оставил.
Добавлять нужно только вниз (достаточно проявить смекалку чтобы это понять, там же две папки для примера).
При добавлений нужно не забывать, что у всех строк на конце должна быть запятая, кроме как у последней.
 
Автор
S

Scampy

Новичок
Сообщения
54
Репутация
0
CreatoR сказал(а):
Нет, там всегда 3 столбца, я же комментарии специально оставил.
Добавлять нужно только вниз (достаточно проявить смекалку чтобы это понять, там же две папки для примера).
При добавлений нужно не забывать, что у всех строк на конце должна быть запятая, кроме как у последней.
Как добавлять вниз я понял... а как добавить правее?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,485
Я не понимаю зачем тебе правее?
Можно упростить:

Код:
;Тут добавляем тексты для Checkbox и пути к папкам ('текст|путь:\к\папке')
Global $aDirs[] = ['Папка C:\1|C:\1', 'Папка C:\2|C:\2', 'Папка %temp%|' & @TempDir]

Global $aCheckBox[UBound($aDirs)][3]

For $i = 0 To UBound($aDirs) - 1
	$aText_Dir = StringSplit($aDirs[$i], '|')
	$aCheckBox[$i][0] = 0
	$aCheckBox[$i][1] = $aText_Dir[1]
	$aCheckBox[$i][2] = $aText_Dir[2]
Next

...
 
Автор
S

Scampy

Новичок
Сообщения
54
Репутация
0
CreatoR сказал(а):
Я не понимаю зачем тебе правее?
Правее - это если колонка из checkbox-ов будет слишком длинная, но в принципе это не критично, спасибо
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,485
Если речь про позицию в GUI, то решается примерно так:

Код:
...

$iTop = 30 ;Начальная позиция галочек сверху
$iLeft = 20 ;Начальная позиция галочек с лева
$iMaxTop = 60 ;Максимальная позиция последней галочки в столбце

For $i = 0 To UBound($aCheckBox) - 1
	$aCheckBox[$i][0] = GUICtrlCreateCheckbox($aCheckBox[$i][1], $iLeft, $iTop, 110, 17)
	GUICtrlSetOnEvent(-1, '_Events')
	$iTop += 20
	
	If $iTop >= $iMaxTop Then
		$iTop = 30
		$iLeft += 120
	EndIf
Next

...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,485
Поменял свой последний вариант, теперь уже проще некуда :laugh:.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Позволю себе ещё вставить свои 5 копеек :smile: Если значения путь-названия Checkbox-ов либо их количество в процессе использования скрипта могут меняться, то рациональнее было-бы использование ini файла для хранения информации, а при запуске скрипта использовать
Код:
IniReadSection ( "filename", "section" )
и в цикле создавать Checkbox. В размере скрипт не увеличится (если не писать отдельный GUI для удобства добавления/удаления папок), но в пользовании будет удобнее.
И ещё насчет
Scampy сказал(а):
если колонка из checkbox-ов будет слишком длинная
если колонка из checkbox-ов будет слишком длинная
можно Checkbox-сы вставить в ListView , будет выглядеть так :
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>


Dim $listview_[100]




$GUI = GUICreate("", 422, 260)
$ListView = GUICtrlCreateListView("Папки     |Путь к папке    ", 16, 12, 300, 214, -1, BitOR($WS_EX_CLIENTEDGE,$LVS_EX_CHECKBOXES))
 for $i=0 to 99

 $listview_[$i]= GUICtrlCreateListViewItem("Папка"&$i+1&"|Путь к папке "&$i+1, $ListView)


next

GUISetState(@SW_SHOW,$GUI)
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Вот так , например я вижу это :
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <File.au3>


Opt("GUIOnEventMode", 1)



$IniFile=@ScriptDir&"\data.ini"; => Путь к .ini файлу
Dim $listview_[0]

$GUI = GUICreate("", 525, 260)
$ListView = GUICtrlCreateListView("Папки     |Путь к папке    |Размер ,Мб  ", 15, 12, 300, 237, -1, BitOR($WS_EX_CLIENTEDGE,$LVS_EX_CHECKBOXES,$LVS_EX_GRIDLINES))
GUICtrlCreateGroup("Всего выбрано",325,12,190,60)
GUICtrlSetFont(-1,12)
$label1=GUICtrlCreateLabel("",340,32,170,30)
GUICtrlSetFont(-1,20)
$Button1=GUICtrlCreateButton("Очистить",325,80,190,30)
GUICtrlSetOnEvent(-1, "Events")
GUICtrlSetFont(-1,18)
$label2=GUICtrlCreateLabel("",340,120,170,30)
GUICtrlSetFont(-1,12)
GUICtrlSetColor(-1,0xFF0000)

GUICtrlCreateGroup("Добавить/Удалить папку",325,150,190,100)
$NewName=GUICtrlCreateInput("Название папки",335,170,170,20)
$NewPath=GUICtrlCreateInput("Путь к папке",335,195,170,20)
$Button2=GUICtrlCreateButton("Добавить",335,220,80,20)
GUICtrlSetOnEvent(-1, "Events")
$Button3=GUICtrlCreateButton("Удалить",425,220,80,20)
GUICtrlSetOnEvent(-1, "Events")


GUISetOnEvent($GUI_EVENT_CLOSE, "Events")
GUISetState(@SW_SHOW,$GUI)



if not FileExists($IniFile) then _FileCreate($IniFile)

$Path=IniReadSection($IniFile,'Путь')
If not @error then CreateCheckBox($Path)







Func AddPath(); добавить новую папку + путь к папке в ini файл

  If GUICtrlRead($NewName)<>"Название папки" and GUICtrlRead($NewName)<>"" and GUICtrlRead($NewPath)<>"Путь к папке" and GUICtrlRead($NewPath)<>"" Then

      IniWrite ($IniFile,"Путь",GUICtrlRead($NewName),GUICtrlRead($NewPath))

      $Path=IniReadSection($IniFile,'Путь')
      CreateCheckBox($Path)

  EndIf

EndFunc


Func DellPath() ; Удалить запись из ини файла - только по названию папки

  If GUICtrlRead($NewName)<>"Название папки" and GUICtrlRead($NewName)<>""  Then

      IniDelete ($IniFile,"Путь",GUICtrlRead($NewName))

      $Path=IniReadSection($IniFile,'Путь')
      CreateCheckBox($Path)

  EndIf

EndFunc







Func CreateCheckBox($Path); Создание CheckBox-ов из данных ini файла
    ReDim $listview_[$Path[0][0]]
    _GUICtrlListView_DeleteAllItems ( $ListView )

    for $i=1 to $Path[0][0]
      $Size=Round(DirGetSize($Path[$i][1]) / 1048576, 2)

      $listview_[$i-1]= GUICtrlCreateListViewItem($Path[$i][0]&"|"&$Path[$i][1]&"|"&$Size, $ListView)
       GUICtrlSetOnEvent(-1, "Events")


    next

EndFunc




Func DelFile();=> Очистка файлов в выбраных папках
    $DelSize=0
    GUICtrlSetData($Label2,'')

               For $i=1 to $Path[0][0]


                If  _GUICtrlListView_GetItemChecked($ListView,$i-1) Then
                         $filelist = _FileListToArray($Path[$i][1], '*', 0, True)
                            If Not @error > 0 Then
                              For $y = 1 To $filelist[0]
                                $fga = FileGetAttrib($filelist[$y])
                                   If StringInStr($fga, 'D') Then
                                     $DelSize+=Round(DirGetSize ($filelist[$y])/ 1048576, 2)

                                     DirRemove($filelist[$y], 1)
                                   Else

                                     $DelSize+=Round(FileGetSize($filelist[$y])/ 1048576, 2)


                                     FileDelete($filelist[$y])
                                   EndIf
                              Next
                           EndIf


                EndIf
               Next

GUICtrlSetData($Label2,'Удалено '&$DelSize&' Мб')
GUICtrlSetData($Label1,'')
CreateCheckBox($Path)
EndFunc






Func Events()

    Select
        Case @GUI_CtrlId = $GUI_EVENT_CLOSE
            Exit

        Case @GUI_CtrlId =  $Button1


            DelFile()

        Case @GUI_CtrlId =  $Button2

            AddPath()

        Case @GUI_CtrlId =  $Button3


            DellPath()

        Case else
            $OllSize=0
            $x=0;=>Всего количество отмеченных чекбоксов
            GUICtrlSetData($Label2,'')


               For $i=1 to $Path[0][0]


                If  _GUICtrlListView_GetItemChecked($ListView,$i-1) Then
                 $OllSize+=Round(DirGetSize($Path[$i][1]) / 1048576, 2)
                 $x+=1
                 GUICtrlSetData($Label1,$OllSize&' Мб')
                EndIf
               Next

               If $x=0 then GUICtrlSetData($Label1,'')


    EndSelect
EndFunc   ;==>Events




While 1
sleep (10)
WEnd
 
Верх