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

Вниз

Считать большой файл частями   Найти похожие ветки 

 
Tapok   (2005-11-24 09:27) [0]

Зравствуйте. Я пишу программу, которая упаковывает несколько файлов в один (что то типа архиватора).
Для расчета размера буфера, в который будет прочитан файл я использую такую функцию

function GetFileBufferSize(DriveName: String; SizeOfFile: Int64): LongWord;
var
 MemStatus: MEMORYSTATUS;
 SPerClr,BytesPerSector,
 NumOfFreeClrs,TtlNumOfClrs: LongWord;
begin
 Result := 0;
 MemStatus.dwLength := SizeOf(MemStatus);
 GlobalMemoryStatus(MemStatus);
//если размер файла превышает доступную физ.память div 2
 if SizeOfFile >= (MemStatus.dwAvailPhys div 2) then
 begin
   GetDiskFreeSpace(PChar(DriveName),SPerClr,
     BytesPerSector,NumOfFreeClrs,TtlNumOfClrs);
   Result := BytesPerSector; // размер буфера равен размеру кластера
 end else
   Result := SizeOfFile; // или размеру файла
end;

Дальше файл читается и записывается в архив

while not EOF(F) do
beign
 BlockRead(..
 BlockWrite(..
end;
С небольшими файлами не возникает проблем, а при чтении больших иногда выскакивает EInOutError.
Можно было бы читать и записывать по одному байту, но это дико медлено...
Подскажите как правильно рассчитать размер буфера для файла?


 
umbra ©   (2005-11-24 11:19) [1]

зачем по байту? лучше установить размер буфера кратный размеру страницы памяти (4096 байт). А то если читать покластерно, а файловая система система NTFS, то получится чтение по 512 байт, а в памяти все равно будет занимать страницу



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

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

Наверх




Память: 0.47 MB
Время: 0.042 c
6-1124194546
Alexey_T-O
2005-08-16 16:15
2005.12.18
открыть файл через локалку


2-1133192716
Yurij-7
2005-11-28 18:45
2005.12.18
INSERT, поля суммы и даты


11-1114235176
BelchonokH
2005-04-23 09:46
2005.12.18
Создание МСК компонентов из чисто КОЛовских


14-1132823122
Kolan
2005-11-24 12:05
2005.12.18
Геде бы найти реферат о том что комьпьютер НЕ вреден.


4-1129555315
dredd
2005-10-17 17:21
2005.12.18
инфа о motherboard