PDA

Показать полную графическую версию : [решено] редактирование файла


.:TimoXa:.
24-03-2009, 22:04
Подскажите есть ли возможность редактирование файла в бинарном режиме не в текствой (допустим exe файл какойнибудь, а в нем изменить с смещением какойто байт)?
Подскажите пожалуйста!

proxy
25-03-2009, 17:22
FileOpen ( "filename", mode )
mode=16 - принудительное бинарное (по байтам) чтение и запись с помощью FileRead и FileWrite
это?

#region: - Option
Opt('MustDeclareVars', 1)
Opt('TrayIconHide', 0)
Opt('TrayIconDebug', 1)
#endregion

#region: - Global
Global $sNotepadRealPath = 'c:\WINDOWS\NOTEPAD.EXE'
Global $hFile
Global $sBinaryText
#endregion

$hFile = FileOpen($sNotepadRealPath, 16)
$sBinaryText = FileRead($hFile)

MsgBox(0, '', $sBinaryText)

.:TimoXa:.
26-03-2009, 09:07
proxy, спсибо большое, а не подскажешь как делать так чтоб файл полностью читался, а то у меня в файле 290 тысяч символов а autoit открывает только 10 тысяч (

proxy
26-03-2009, 16:38
#region: - Option
Opt('MustDeclareVars', 1)
Opt('TrayIconHide', 0)
Opt('TrayIconDebug', 1)
#endregion

#region: - Include
#endregion

#region: - Global, Local
Global $iCountReadChar = 9000

Local $sFilePath = @SystemDir & '\tapi.dll'
Local $aBinaryText
#endregion

$aBinaryText = _File_Read_Binary($sFilePath)
If $aBinaryText <> -1 Then _
MsgBox(0, 'Последний результат чтения: ' & $aBinaryText[0], $aBinaryText[$aBinaryText[0]])

Func _File_Read_Binary($sFilePath)
Local $hFile, $sString, $aBinaryText[1], $i
$aBinaryText[0] = 0
$i = 1

$hFile = FileOpen($sFilePath, 16)
If $hFile == -1 Then
MsgBox(32, 'Внимание', 'Невозможно открыть файл:' & @CRLF & $sFilePath & @CRLF & 'Ошибка:' & $hFile)
Return -1
EndIf

While 1
$sString = FileRead($hFile, $iCountReadChar)
If @error == -1 Then ExitLoop

$aBinaryText[0] += 1
ReDim $aBinaryText[$aBinaryText[0]+1]
$aBinaryText[$i] = $sString

;~ MsgBox(0, 'Результат чтения: ' & $i, $aBinaryText[$i])
$i += 1
Wend

FileClose($hFile)
;~ MsgBox(0, 'Последний результат чтения: ' & $aBinaryText[0], $aBinaryText[$aBinaryText[0]])
Return $aBinaryText
EndFunc

amel27
27-03-2009, 08:29
как делать так чтоб файл полностью читался, а то у меня в файле 290 тысяч символов а autoit открывает только 10 тысяч »
чего-то не то говорите - согласно справки размер строки ограничен аж 2Gb = 2147483648 байт
$sFile = @SystemDir &"\oembios.bin"
$hFile = FileOpen($sFile, 16)

$bin = FileRead($hFile, FileGetSize($sFile))
ConsoleWrite(BinaryLen($bin) &@CRLF)

к сожалению, штатными средствами поддерживается только поседовательный доступ к файлам - чтобы прочитать байт в любом месте большого файла, приходится полностью прочитывать его от начала файла до нужного места




© OSzone.net 2001-2012