AlexTurist
Новичок
- Сообщения
- 13
- Репутация
- 1
Здравствуйте. Есть необходимость в большом файле искать определенные значения и заменять их, когда делал это на небольшом файле (около 5мб) все работало вот так
Но когда попался фаил 3 Гб то выскочила ошибка по нехватки памяти, читал что для решения такой задачи нужно отрезать кусочек искать в нем потом следующий итд, но ни как не пойму как вычислить какой объем можно максимум отрезать и можно ли как то гарантировать что часть переменной не попадет во вторую половину? Может есть какой то более простой способ решения проблемы?
Код:
$Map = "2_test.img"
$sFind = "ca6145350a5551443a1744504849054353593d0445665a35055ae744351cfb51"
$sReplace = "871101000612010005130100041401000315080002161600011797000018b801"
_Find_and_edit ($Map,$sReplace,$sFind)
Func _Find_and_edit ($path,$HexReplace,$HexFind)
_Hex_Edit ($path, _Find_adress ($path, $HexFind),"0x"&$HexReplace)
EndFunc
Func _Hex_Edit ($path, $adress,$HexReplace) ;
$File = FileOpen ( $path, 1 )
FileSetPos ($File, $adress, 0)
$BinaryReplace = BinaryToString ($HexReplace)
FileWrite ($File, $BinaryReplace)
EndFunc
Func _Find_adress ($path, $HexFind)
$hFile = FileOpen ( $path, 16)
$sRead = FileRead ($hFile)
$adress_for_return = (StringInStr ($sRead, $HexFind) -3) / 2
MsgBox (0,"", $HexFind & " " & $adress_for_return)
Return $adress_for_return
EndFunc