#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Process.au3>
Global $razmer, $sFolderName, $sNewName, $Combo1, $sFile
$Form1 = GUICreate("Прозектор", 447, 147, 192, 124)
$Input1 = GUICtrlCreateInput("", 8, 48, 377, 21)
$Button1 = GUICtrlCreateButton(".....", 400, 48, 35, 25)
$Label1 = GUICtrlCreateLabel("Размер:", 176, 24, 46, 17)
$Combo1 = GUICtrlCreateCombo("", 16, 104, 57, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData($Combo1, "1|2|3|4|5|6|7|8|9|10", 1)
$Label2 = GUICtrlCreateLabel("Исходный файл", 8, 24, 92, 17)
$size = GUICtrlCreateLabel("", 240, 24, 110, 17)
$Label4 = GUICtrlCreateLabel("На сколько делим?", 16, 80, 104, 17)
$Button2 = GUICtrlCreateButton("Разделить", 136, 104, 91, 25)
$Button3 = GUICtrlCreateButton("Прервать", 296, 104, 91, 25)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$Path = FileOpenDialog('', '', '(*.*)')
$razmer = FileGetSize($Path)
GUICtrlSetData($Input1, $Path)
GUICtrlSetData($size, $razmer)
Case $Button2
GUICtrlSetState($Button2, $GUI_DISABLE)
_delim()
_script_compile()
GUICtrlSetState($Button2, $GUI_ENABLE)
Case $Button3
EndSwitch
WEnd
Func _delim()
$sFile = GUICtrlRead($Input1, 1)
If FileExists($sFile) Then
$iPart = GUICtrlRead($Combo1, 1)
$iMaxRead = 1024 * 1024 * 1
$sFolderName = StringRegExpReplace($sFile, '^.*\.', '') & '_' & StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')
$sNewName = StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')
$iSize = FileGetSize($sFile)
$iPartSize = Ceiling($iSize / $iPart)
If $iMaxRead > $iPartSize Then $iMaxRead = $iPartSize
$hFile = FileOpen($sFile, 16)
For $i = 1 To $iPart
$hTempFile = FileOpen(@ScriptDir & '\' & $sFolderName & '\' & $i & '_' & $sNewName & '.xyz', 26)
$iSizeRead = 0
$iRead = $iMaxRead
While $iSizeRead < $iPartSize
$sTempText = FileRead($hFile, $iRead)
FileWrite($hTempFile, $sTempText)
$iSizeRead += $iRead
If $iRead > $iPartSize - $iSizeRead Then $iRead = $iPartSize - $iSizeRead
WEnd
FileClose($hTempFile)
Next
FileClose($hFile)
Else
SetError(0)
EndIf
EndFunc ;==>_delim
Func _join()
$iMaxRead = 1024 * 1024 * 1
$sFile = GUICtrlRead($Input1, 1)
$iPart = Number(GUICtrlRead($Combo1, 1))
If Not $iPart Or Not $sFile Then
MsgBox(16, 'ошибка', 'нечего соединять')
Exit
EndIf
$sName = StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')
$hFile = FileOpen(@ScriptDir & '\' & $sFile, 17)
For $i = 1 To $iPart
$iError = 0
$hTempFile = FileOpen(@ScriptDir & '\' & $i & '_' & $sName & '.xyz', 16)
While $iError <> -1
$sTempText = FileRead($hTempFile, $iMaxRead)
$iError = @error
FileWrite($hFile, $sTempText)
WEnd
FileClose($hTempFile)
Next
FileClose($hFile)
EndFunc ;==>_join
Func _script_compile()
Local $i_Pid
Local $s_Script = "#NoTrayIcon" & @CRLF & _
"$iMaxRead = 1024 * 1024 * 1" & @CRLF & _
"$sFile =" & """" & StringRegExpReplace($sFile, '^.*\\', '') & """" & @CRLF & _
"$iPart =" & Number(GUICtrlRead($Combo1, 1)) & @CRLF & _
"If Not $iPart Or Not $sFile Then" & @CRLF & _
"MsgBox(16, 'Error', 'Error')" & @CRLF & _
"Exit" & @CRLF & _
"EndIf" & @CRLF & _
"$sName = StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')" & @CRLF & _
"$hFile = FileOpen(@ScriptDir & '\' & $sFile, 17)" & @CRLF & _
"For $i = 1 To $iPart" & @CRLF & _
"$iError = 0" & @CRLF & _
"$hTempFile = FileOpen(@ScriptDir & '\' & $i & '_' & $sName & '.xyz', 16)" & @CRLF & _
"While $iError <> -1" & @CRLF & _
"$sTempText = FileRead($hTempFile, $iMaxRead)" & @CRLF & _
"$iError = @error" & @CRLF & _
"FileWrite($hFile, $sTempText)" & @CRLF & _
"WEnd" & @CRLF & _
"FileClose($hTempFile)" & @CRLF & _
"Next" & @CRLF & _
"FileClose($hFile)"
$h_File = FileOpen(@ScriptDir & "\" & $sFolderName & "\join.au3", 2)
FileWrite($h_File, $s_Script)
FileClose($h_File)
Sleep(2000)
$i_Pid = Run(@ComSpec & " /C start Aut2exe.exe /in " & FileGetShortName(@ScriptDir & "\" & $sFolderName & "\join.au3"), '', @SW_HIDE)
Return $i_Pid
EndFunc ;==>_script_compile