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

Вниз

BlockRead/BlockWrite   Найти похожие ветки 

 
tupnyaki poshli   (2005-02-21 14:35) [0]

Что-то клинит по страшному...
Как удалить (обнулить) часть нетипизированного файла, то бишь, обнулить все значения начиная с какой-либо позиции до конца файла?
Просто разбирался с командами чтения\записи файла по блокам, и тут столкнулся с такой проблемой... Может вопрос и тупой, но я пока понять не могу, хелп мастера!


 
DiamondShark ©   (2005-02-21 14:41) [1]

Так удалить, или обнулить?
Удалить -- Truncate.
Обнулить -- писать нули.


 
begin...end ©   (2005-02-21 15:24) [2]

> tupnyaki poshli   (21.02.05 14:35)

var
 F: file;
 P: Pointer;
 Position, Size: Integer;
begin
 AssignFile(F, "...");
 Reset(F, 1);
 Position := ...;
 Size := FileSize(F) - Position;
 GetMem(P, Size);
 try
   ZeroMemory(P, Size);
   Seek(F, Position);
   BlockWrite(F, P^, Size)
 finally
   FreeMem(P);
   CloseFile(F)
 end
end


То же самое можно сделать и с помощью класса TFileStream.

Этот способ подойдёт для случая, когда требуется обнулить сравнительно небольшой кусок в файле, т.к. размер выделяемой памяти под буфер P равен размеру этого куска. Для обнуления большой области лучше, ИМХО, выделять буфер поменьше, но записывать его в файл несколько раз (последовательно). Можно, конечно, записывать и по одному байту, но это будет медленно.



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

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

Наверх




Память: 0.47 MB
Время: 0.03 c
1-1108998536
Leksey
2005-02-21 18:08
2005.03.06
Как удалить ненужный TabSheet из PageControl?


3-1107868627
Ч_А_Й_Н_И_К
2005-02-08 16:17
2005.03.06
Получение имени сервера как параметр


3-1107506997
Yasik
2005-02-04 11:49
2005.03.06
Двойной вопрос


1-1109074115
vlv
2005-02-22 15:08
2005.03.06
Как заставить мигать кнопку приложения на панели задач?


1-1108563511
TeNY
2005-02-16 17:18
2005.03.06
как зная Pointer загрузить строку?