Skip to content

Commit

Permalink
Релизовано порционное чтение-запись файлов при распаковке EFD (#64)
Browse files Browse the repository at this point in the history
Co-authored-by: vkislitsin <[email protected]>
  • Loading branch information
vkislitsin and vkislitsin authored Dec 30, 2024
1 parent 81c5e5f commit eff63f0
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions src/Модули/Распаковщик.os
Original file line number Diff line number Diff line change
Expand Up @@ -526,17 +526,23 @@
//
Процедура ЗаписатьФайл(Поток, Знач ОписаниеФайла, Знач КаталогРаспаковки)

ПутьКФайлу = ОбъединитьПути(КаталогРаспаковки, ОписаниеФайла.Имя);
ОбеспечитьКаталог(ПутьКФайлу, Истина);

Чтение = Новый ЧтениеДанных(Поток);
Чтение.Пропустить(ОписаниеФайла.Смещение);
БуферДанные = Чтение.ПрочитатьВБуферДвоичныхДанных(ОписаниеФайла.Размер);
Чтение.Закрыть();
ЗаписьДанных = Новый ЗаписьДанных(ПутьКФайлу);

ПутьКФайлу = ОбъединитьПути(КаталогРаспаковки, ОписаниеФайла.Имя);
ПорцияДанных = 10 * 1024 * 1024; // 10 Мб
Остаток = ОписаниеФайла.Размер;

ОбеспечитьКаталог(ПутьКФайлу, Истина);
Пока Остаток > 0 Цикл
БуферДанные = Чтение.ПрочитатьВБуферДвоичныхДанных(Мин(Остаток, ПорцияДанных));
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(БуферДанные);
Остаток = Остаток - ПорцияДанных;
КонецЦикла;

ЗаписьДанных = Новый ЗаписьДанных(ПутьКФайлу);
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(БуферДанные);
Чтение.Закрыть();
ЗаписьДанных.Закрыть();

Лог.Информация(СтрШаблон("Записан файл %1", ПутьКФайлу));
Expand Down

0 comments on commit eff63f0

Please sign in to comment.