Текущий архив: 2004.01.26;
Скачать: CL | DM;
Вниз
Работа с бинарным файлом Найти похожие ветки
← →
LVV (2004-01-13 01:34) [0]Доброй ночи!
Как в двоичном файле вырезать группу байтов? То есть, к примеру есть бинарник размером в 100 байт
[Байт 0 .. Байт 50][Байт 51 .. Байт 75][Байт 76 .. Байт 99]
Нужно вырезать байты с 51 по 75, чтоб получилось
[Байт 0 .. Байт 50][Байт 76 .. Байт 99]
Я использую FileRead, FileWrite.
Я только начал работать с бинарными файлами, не подскажете ли, какие-нибудь статьи на эту тему?
Thanks
← →
PKT (2004-01-13 02:03) [1]http://delphi.vitpc.com/lyceum/seminar.asp?partID=4&LessonID=15
← →
Рамиль © (2004-01-13 08:43) [2]Вырезать из файла можно только его перезаписыванием.
← →
LVV (2004-01-13 20:41) [3]Да уж, прочитал я статью. К сожалению не нашёл ответа на свой вопрос. Похоже действительно придётся перезаписывать. :(
← →
YuRock © (2004-01-13 20:46) [4]Не обязательно перезаписывать. Просто надо перезаписать (предварительно считав) [Байт 76 .. Байт 99] на место [Байт 51 .. Байт 75], а затем вызвать Truncate(f);
← →
LVV (2004-01-14 01:59) [5]А если используются не файловые переменные а хэндлы, то операцию Truncate(F) можно заменить на API-функцию SetEndOfFile(hFile)
OK, если мнений больше нет, ветку объявляю закрытой!
PS : Теперь потрудимся над вставкой байтов
← →
Andy BitOff © (2004-01-14 04:16) [6]
procedure TForm1.Button1Click(Sender: TObject);
var h:hwnd;
i,a:integer;
s:Pointer;
begin
h:=_lopen("C:\1.txt",OF_READWRITE);
i:=GetFileSize(h,@a);
s:=AllocMem(i);
_lread(h,s,i);
asm
push edi
push esi
mov esi,[s]
push esi
mov edi,esi
add edi,51
add esi,76
mov ecx,99-76
repne movsb
pop eax
sub edi,eax
mov i,edi
pop esi
pop edi
end;
SetFilePointer(h,0,0,0);
_lwrite(h,s,i);
SetEndOfFile(h);
CloseHandle(h);
FreeMem(s);
end;
← →
Andy BitOff © (2004-01-14 04:49) [7]Ай, досадную ошибочку заметил.
mov ecx,99-76 +1
← →
LVV (2004-01-15 02:04) [8]Круто! Тока не совсем понятно. :)
← →
Andy BitOff © (2004-01-15 02:12) [9]А чего не понятно?
← →
Германн © (2004-01-15 03:29) [10]2YuRock © (13.01.04 20:46) [4]
А как красиво звучит:
> Не обязательно перезаписывать. Просто надо перезаписать...
:)))
← →
LVV (2004-01-15 11:22) [11]2 AndyBitOff
А чего не понятно?
Да так... с ассемблером я знаком, но слабо... но это уже моя вина, буду изучать (REPNE)
Спасибо за столь разнообразные ответы :)
← →
YuRock © (2004-01-15 11:32) [12]> Германн © (15.01.04 03:29) [10]
Ну получился некий каламбурчик...
Страницы: 1 вся ветка
Текущий архив: 2004.01.26;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.011 c