Skip to content

Commit eff63f0

Browse files
authored
Релизовано порционное чтение-запись файлов при распаковке EFD (#64)
Co-authored-by: vkislitsin <vvkislitsin@gmail.com>
1 parent 81c5e5f commit eff63f0

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

src/Модули/Распаковщик.os

+12-6
Original file line numberDiff line numberDiff line change
@@ -526,17 +526,23 @@
526526
//
527527
Процедура ЗаписатьФайл(Поток, Знач ОписаниеФайла, Знач КаталогРаспаковки)
528528

529+
ПутьКФайлу = ОбъединитьПути(КаталогРаспаковки, ОписаниеФайла.Имя);
530+
ОбеспечитьКаталог(ПутьКФайлу, Истина);
531+
529532
Чтение = Новый ЧтениеДанных(Поток);
530533
Чтение.Пропустить(ОписаниеФайла.Смещение);
531-
БуферДанные = Чтение.ПрочитатьВБуферДвоичныхДанных(ОписаниеФайла.Размер);
532-
Чтение.Закрыть();
534+
ЗаписьДанных = Новый ЗаписьДанных(ПутьКФайлу);
533535

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

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

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

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

0 commit comments

Comments
 (0)