|
Вопрос # 732/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Нужно заменить в файле какой-нибудь бит. Например, под номером 339741.
Формат неизвестен.
Меняю значение 116 на 235, но он меняется.
Почему?
Почему не
Приложение: Переключить в обычный режим- var
- MyFile:file;
- B:byte;
- F:TFileStream;
- begin
- if Form1.OpenDialog1.Execute then
- begin
- F:=TFileStream.Create(Form1.OpenDialog1.FileName,fmOpenRead);
- F.Position:=339741;
-
-
- F.Position:=339741;
- F.Write(B,1);
- F.Free;
- end;
 |
Вопрос задал: Фамилия Имя Отчество (статус: Посетитель)
Вопрос отправлен: 12 июля 2007, 16:23
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Emfs!
Дело в том, что F.Position:=339741; это позиционируется на байт, а не на бит.Это раз
А во вторых, файл вы открываете только для чтения (fmOpenRead), а надо б и для записи. Замените на fmOpenReadWrite и будет счастье. Патчим переходы на безусловные:)?
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 12 июля 2007, 16:31
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: min@y™
А по старинке можно сделать и так:
procedure dwPatchFile(Filename: String; Data: array of Byte; Offset, Count: LongInt);
var
f: File;
begin
AssignFile(f, Filename);
{$i-}
Reset(f, 1);
{$i+}
if IoResult <> 0 then exit;
Seek(f, Offset);
BlockWrite(f, Data, Count);
CloseFile(f);
end;
Скопипастил из Delphi Works.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 13 июля 2007, 08:07
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 13 июля 2007, 06:44; участников в обсуждении: 1.
|
Фамилия Имя Отчество (статус: Посетитель), 13 июля 2007, 06:44 [#1]:
Точно, да и сам уже разобрался. Но спасибо всё равно. Оценка.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|