Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Править двоичные файлы

Delphi , Файловая система , Файлы

Править двоичные файлы

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

// Replaces a string in a file with new string. 
// Ersetzt eine Zeichenkette in einer Datei mit einer anderen Zeichenkette. 

procedure TForm1.Button1Click(Sender: TObject);
 var
   f: file;
   l: Longint;
   FileName, oldstring, newstring, s: string;
 begin
   oldstring := 'old string';
   newstring := 'new string';
   FileName  := 'c:\YourFileName.xyz';

      s := oldstring;
   AssignFile(f, FileName);
   Reset(f, 1);
   for l := 0 to FileSize(f) - Length(oldstring) - 1 do
   begin
     Application.ProcessMessages;
     Seek(f, l);
     BlockRead(f, oldstring[1], Length(oldstring));
     if oldstring = s then
     begin
       Seek(f, l);
       BlockWrite(f, newstring[1], Length(newstring));
       ShowMessage('String successfully replaced!');
     end;
     Application.ProcessMessages;
   end;
   CloseFile(f);
 end;

Привет! Вот перевод текста на русский язык:

Декларация процедуры

procedure TForm1.Button1Click(Sender: TObject);

Это процедура, которая будет вызвана при клике кнопки Button1 на форме.

Декларация переменных

var
  f: file;
  l: Longint;
  FileName, oldstring, newstring, s: string;
begin

Следующие переменные объявлены:

  • f: файловая переменная, которая будет использоваться для чтения и записи двоичного файла.
  • l: целочисленная переменная, которая будет использоваться как счётчик цикла.
  • FileName, oldstring, newstring и s - строковые переменные.

Инициализация

oldstring   := 'старая строка';
newstring   := 'новая строка';
FileName    := 'c:\ВашФайл.xyz';

Следующие строки инициализированы:

  • oldstring: оригинальная строка, которую нужно заменить.
  • newstring: строка замены.
  • FileName: путь и имя двоичного файла, который будет модифицирован.

Чтение и замена

s   := oldstring;
AssignFile(f, FileName);
Reset(f, 1);
for l  := 0 to FileSize(f) - Length(oldstring) - 1 do
begin
  Application.ProcessMessages; // Обработка любых pending сообщений
  Seek(f, l); // Перемещение указателя файла на текущую позицию
  BlockRead(f, oldstring[1], Length(oldstring)); // Чтение блока байтов из файла
  if oldstring = s then // Проверка, если прочитанная строка соответствует оригинальной строке
  begin
    Seek(f, l); // Перемещение указателя файла обратно на текущую позицию
    BlockWrite(f, newstring[1], Length(newstring)); // Запись строки замены в файл
    ShowMessage('Строка успешно заменена!'); // Отображение сообщения с результатом
  end;
  Application.ProcessMessages; // Обработка любых pending сообщений снова
end;
CloseFile(f); // Закрытие файла

Код читает двоичный файл блок за блоком, проверяет каждый блок на соответствие оригинальной строке и заменяет ее новой строкой, если соответствие найдено. Используются процедуры BlockRead и BlockWrite для чтения и записи блоков байтов из файла.

Замечания

  • Это код assumes, что двоичный файл имеет формат, который позволяет для блочно-чтения и записи.
  • Важно отметить, что это код не обрабатывает ошибки хорошо, поэтому может не работать правильно, если файл повреждён или есть проблемы с доступом к диску.
  • Используются вызовы Application.ProcessMessages для обработки любых pending сообщений (например, от других потоков), чтобы предотвратить блокировку программы.

Альтернативное решение Если вам нужно заменять строки в двоичном файле более эффективно, вы можете рассмотреть использование библиотеки, которая предоставляет более robust и эффективный способ работы с двоичными файлами, например, TA Util Library или JclFileUtils. Alternatively, если вы работаете с текстовыми файлами, вам может быть полезно использовать библиотеку для обработки текста, например, Tee или TextFinder. Эти библиотеки предоставляют более advanced функции для поиска и замены текста в файлах.

В статье описывается процедура, которая позволяет заменить строку в двоичном файле на новую строку с использованием Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 19:55:17/0.0037851333618164/0