Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

Как изменить определенный байт в файле   Найти похожие ветки 

 
wipr   (2006-08-11 21:16) [0]

Имею файл 10Мбайт, может быть и больше. Необходимо например изменить только к примеру 28 байт.
Я открывал 2 файла и писал байты из одного в другой при этом заменял необходимый байт. Ото допустимо с маленькими файлами. С большими это неудобно.
Можно ли это сделать не перибирая все байты. Если это возможно, то подскажите как это делается. Был бы рад кусочку кода.


 
Чапаев ©   (2006-08-11 21:19) [1]

Смотри в сторону file mapping. Работаешь с файлом как с обычным массивом в оперативке.


 
wipr   (2006-08-11 21:21) [2]

Для меня это ново. Если можно поподробнее.


 
begin...end ©   (2006-08-11 21:28) [3]

Для одного байта можно и так (здесь байты в файле считаются с нуля):

var
 hF: Integer;
 B: Byte;
begin
 B := ...;
 hF := FileOpen("C:\MyFile.txt", fmOpenWrite);
 if hF > -1 then
   try
     FileSeek(hF, 28, 0);
     FileWrite(hF, B, sizeof(B))
   finally
     FileClose(hF)
   end
end.


 
wipr   (2006-08-11 21:32) [4]

Большое спасибо. Кажется то что надо. Но не могли бы Вы уточнить
в FileSeek(hF, 28, 0);
что собой представляет 28, а что 0
в FileWrite(hF, B, sizeof(B))
что собой представляет B, а что sizeof(B)


 
begin...end ©   (2006-08-11 21:38) [5]

> wipr   (11.08.06 21:32) [4]

Параметры этих функций описаны в справке.

В FileSeek 28 -- число байтов, на которое нужно сместить указатель внутри файла, а 0 указывает "отправную точку" для смещения -- от начала файла. В FileWrite B -- это переменная, содержимое которой нужно записать в файл (в данном случае это Byte, ведь нужно изменить 1 байт), а sizeof(B) указывает, сколько байтов из памяти нужно записать в файл (1 байт).


 
wipr   (2006-08-11 21:58) [6]

Большое спасибо. Все получилось.



Страницы: 1 вся ветка

Текущий архив: 2006.09.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
2-1157636144
webpauk
2006-09-07 17:35
2006.09.24
есть ли Scroll


15-1156917026
worldmen
2006-08-30 09:50
2006.09.24
Какие видеокарты лучше в раене 80-100$


2-1157531452
P
2006-09-06 12:30
2006.09.24
Как вызвать HasOverlappedIoCompleted из дельфи


2-1157085849
Sergey_b
2006-09-01 08:44
2006.09.24
Динамическое создание компонентов


2-1157110254
NORDmen
2006-09-01 15:30
2006.09.24
Пропадают динамические переменные при вызове любых форм!!!