Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
ВнизКак изменить определенный байт в файле Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c