Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
4-83304
Borgir
2003-11-20 12:30
2004.01.26
Нажатие клавиш


1-83191
MV
2004-01-14 15:07
2004.01.26
Классы с одинаковым кодом, но разными типами свойств.


14-83247
Rauf
2004-01-05 21:56
2004.01.26
Как убрать __inline оптимизацию компилятора в проекте MSVC++7???


1-83154
Hkr
2004-01-14 20:27
2004.01.26
Системное меню


1-83164
Tornado
2004-01-15 15:26
2004.01.26
ActionManager