Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] редактирование файла (http://forum.oszone.net/showthread.php?t=135761)

.:TimoXa:. 24-03-2009 22:04 1073714

редактирование файла
 
Подскажите есть ли возможность редактирование файла в бинарном режиме не в текствой (допустим exe файл какойнибудь, а в нем изменить с смещением какойто байт)?
Подскажите пожалуйста!

proxy 25-03-2009 17:22 1074530

Цитата:

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 1075036

proxy, спсибо большое, а не подскажешь как делать так чтоб файл полностью читался, а то у меня в файле 290 тысяч символов а autoit открывает только 10 тысяч (

proxy 26-03-2009 16:38 1075406

Код:

#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 1075928

Цитата:

Цитата .:TimoXa:.
как делать так чтоб файл полностью читался, а то у меня в файле 290 тысяч символов а autoit открывает только 10 тысяч »

чего-то не то говорите - согласно справки размер строки ограничен аж 2Gb = 2147483648 байт
Код:

$sFile = @SystemDir &"\oembios.bin"
$hFile = FileOpen($sFile, 16)

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

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


Время: 02:47.

Время: 02:47.
© OSzone.net 2001-