Что нового

Есть ли аналог FileInstall'у?

sss

Продвинутый
Сообщения
332
Репутация
96
Всем привет! У меня вот такой вопрос: есть ли аналог FileInstall'у? Чтобы можно было использовать большие файлы, или устанавливать целые папки? Что-нибудь типа SFX-архива... Вот инсталляторы используют большие файлы-архивы setup-1.bin, setup-2.bin... Как можно подобное сделать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Могу предложить функцию для получения списка FileInstall'ов в указанном каталоге.

Код:
#include <File.au3>

$sRet_FI_Lines = _FileInstallGetFolder(_PathFull(@AutoItExe & "\.."), "$aDest[$i]", 1, "*.exe")
ConsoleWrite("+Return:" & @CRLF & $sRet_FI_Lines & @CRLF & @CRLF & "!Error = " & @error & @CRLF & @CRLF)

Func _FileInstallGetFolder($sSource, $sDest, $nFlag = 0, $sMask = "*", $nCompiled = False)
	Local $hSearch, $sNext_File, $sRet_FI_Lines = ""
    
	If (Not $nCompiled) Or ($nCompiled And @Compiled) Then
		$hSearch = FileFindFirstFile($sSource & "\" & $sMask)
		If $hSearch = -1 Then Return SetError(1, 0, "")
		
		;Check if it's a $Var (or $Array[$i][N]...)
		Local $iAddAsVar = StringRegExp($sDest, "\A(\$\w+(\[(\$\w+|\d+)\])*?|@\w+)$")
		
		While 1
            $sNext_File = FileFindNextFile($hSearch)
            If @error Then
				ExitLoop ;No more files
			EndIf
			
			If $sSource = @ScriptDir And $sNext_File = @ScriptName Then
				ContinueLoop
			EndIf
			
			If $iAddAsVar Then
				$sRet_FI_Lines &= 'FileInstall("' & $sSource & '\' & $sNext_File & '", ' & _
					$sDest & ' & "\' & $sNext_File & '", ' & $nFlag & ')' & @CRLF
			Else
				$sRet_FI_Lines &= 'FileInstall("' & $sSource & '\' & $sNext_File & '", "' & _
					$sDest & '\' & $sNext_File & '", ' & $nFlag & ')' & @CRLF
			EndIf
		WEnd
		
		FileClose($hSearch)
    EndIf
	
	If $sRet_FI_Lines = "" Then Return SetError(2, 0, "")
    Return StringStripWS($sRet_FI_Lines, 3)
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Здесь я уже писал что-то подобное.
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
CreatoR
Спасибо за функцию, обязательно добавлю в свой арсенал )
Yashied
Спасибо, но я не до конца понял как она работает. Точнее, как работает понял, но как использовать... Уточни пожалуйста следующее:
1) я так понимаю что записывать файл надо после компиляции? А можно записывать в другой файл - не exe и е тот который скомпилировали?
2) Как из скрипта произвести чтение этого файла? Этот кусок?
Код:
For $i = 1 To $iPart + 1
    If $i > $iPart Then
        _WinAPI_ReadFile($hFile, $pData, $iMod, $iBytes)
    Else
        _WinAPI_ReadFile($hFile, $pData, $iBuf, $iBytes)
    EndIf
    If @error Then
        ; ???
    EndIf
    If $i > $iPart Then
        _WinAPI_WriteFile($hData, $pData, $iMod, $iBytes)
    Else
        _WinAPI_WriteFile($hData, $pData, $iBuf, $iBytes)
    EndIf
    If @error Then
        ; ???
    EndIf
Next
Переменная $sRar - будущее местоположение файла?
3) А можно так записывать несколько файлов? Например, 2 больших архива? И как в таком случае их читать?
4) буфер - это, грубо говоря, какими порциями будем читать\записывать файл?
Спасибо заранее.
 

Ganibal95

GreenBytes
Сообщения
876
Репутация
239
вот мне интерестно, можно ли как нибудь поставить переменную? в FileInstall()
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Верх