Как открыть файл в двоичном режиме и заменить шестнадцатеричные строки? - PullRequest
3 голосов
/ 25 декабря 2010

Мне нужно открыть и отредактировать исполняемый файл в двоичном режиме, чтобы заменить шестнадцатеричное значение в виде строки.

В PHP выглядит так:

<?php
    $fp = fopen('file.exe', 'r+');
    $content = fread($fp, filesize('file.exe'));
    fclose($fp);
    print $content;
    /* [...] This program cannot be run in DOS mode.[...] */
?>

Как мне это получить в C #?

Ответы [ 3 ]

1 голос
/ 25 декабря 2010
public void Manipulate()
{
    byte[] data = File.ReadAllBytes("file.exe");
    byte[] newData;

    //walkthrough data and do what you need to do and move to newData

    File.WriteAllBytes("new_file.exe", newData);

}
0 голосов
/ 25 декабря 2010

Вы спрашиваете о записи в файл, но ваш PHP-код предназначен для чтения. Для работы с файлами вы можете использовать класс FileStream

using(FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Write))
{
    ....
    stream.WriteByte(byte);
    ....
}
0 голосов
/ 25 декабря 2010

Используйте File.ReadAllBytes, чтобы прочитать байты файла как байтовый массив.

byte[] bytes = File.ReadAllBytes('file.exe');

Если вы хотите преобразовать это в шестнадцатеричную строку (и я быВообще, я бы посоветовал не делать этого - строки неизменны в C #, поэтому изменение даже одного байта потребует копирования остальной части строки), например, вы можете использовать:

string hex = BitConverter.ToString(bytes);
...