![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Усечение файла
Separator © (2003-01-09 08:25:00)Как можно удалить n-ое количетво байт в начале файла?
Tano (2003-01-09 22:04:00) [1]
procedure CutFirst(FileName:String; DelCount :Integer);
var
F: File;
P :^Byte;
BlockSize, L :Integer;
begin
AssignFile(F,FileName);
Reset(F,1);
L:=FileSize(F);
BlockSize:=L-DelCount;
//--- перемещаем данные из позиции после вырезаемых байт в начало
GetMem(P,BlockSize);
Seek(F, DelCount);
BlockRead(F,P^,BlockSize);
Seek(F, 0);
BlockWrite(F,P^,BlockSize);
//---
FreeMem(P,L);
Seek(F, L-DelCount);
Truncate(F);
CloseFile(F);
end;
Подходит для небольших файлов (которые поместятся в ОЗУ). Для больших нужно просто перемещать данные поблочно (сколько хватает памяти).
у меня на Duron600/160Mb/20Gb(7200rpm) из файла в 17,5Mb вырезала первые 2 байта за 2,7 сек. Чем больше нужно вырезать, тем быстрее сработает.
DarkGreen (2003-01-09 11:52:00) [2]Сорри, невнимательно прочитал вопрос :-/
DarkGreen (2003-01-09 11:51:00) [3]The SetFilePointer function moves the file pointer of an open file.
DWORD SetFilePointer(
HANDLE hFile, // handle of file
LONG lDistanceToMove, // number of bytes to move file pointer
PLONG lpDistanceToMoveHigh, // address of high-order word of distance to move
DWORD dwMoveMethod // how to move
);
The SetEndOfFile function moves the end-of-file (EOF) position for the specified file to the current position of the file pointer.
BOOL SetEndOfFile(
HANDLE hFile // handle of file whose EOF is to be set
);
ValeraVV (2003-01-09 11:36:00) [4]Блоками сместить данные в начало файла и обрезать, все.
KA_ (2003-01-09 09:21:00) [5]Sorry! Не въехал в вопрос :)
Reindeer Moss Eater (2003-01-09 09:21:00) [6]И что должно получиться?
KA_ (2003-01-09 09:19:00) [7]Попробуй с помощью TFileStream - открой файл и установи свойство Size.
Separator (2003-01-09 09:17:00) [8]Ну ладно, тупой вопрос похоже :)
Reindeer Moss Eater (2003-01-09 09:16:00) [9]скопировать нужную часть в этот же файл
Separator (2003-01-09 09:15:00) [10]А по другому никак нельзя?
MBo (2003-01-09 08:31:00) [11]скопировать нужную часть в новый файл