Текущий архив: 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.062 c