Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.46 MB
Время: 0.045 c
9-1112300436
Pa5ha
2005-04-01 00:20
2006.09.24
Вопросы по OpenGL


15-1157295084
vrem
2006-09-03 18:51
2006.09.24
Раскол


3-1153385859
Mintos
2006-07-20 12:57
2006.09.24
Отчет с отчета (QuikReport)


3-1153901322
partizan
2006-07-26 12:08
2006.09.24
Скорость работы запроса, и количество полей в таблице


2-1157437863
worldmen
2006-09-05 10:31
2006.09.24
Программное изменение языков.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский