Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 732

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!

Нужно заменить в файле какой-нибудь бит. Например, под номером 339741.
Формат неизвестен.
Меняю значение 116 на 235, но он меняется.
Почему?

Почему не

Приложение:
  1. var
  2. MyFile:file;
  3. B:byte;
  4. F:TFileStream;
  5. begin
  6. if Form1.OpenDialog1.Execute then
  7. begin
  8. F:=TFileStream.Create(Form1.OpenDialog1.FileName,fmOpenRead);
  9. F.Position:=339741;
  10.  
  11.  
  12. F.Position:=339741;
  13. F.Write(B,1);
  14. F.Free;
  15. 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]:

Точно, да и сам уже разобрался. Но спасибо всё равно. Оценка.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.03 сек.