Как записать файл из существующего удалив кусок в центре

1. user664038_av.lebedev 17.05.20 16:47 Сейчас в теме
Добрый день знатокам.
Возник вопрос, который не знаю как решить максимально быстрым образом.
При работе с двоичными данными все описывают работу с Картинками и производя чтение сигнатуры файла (Конец).
В моем случае есть файл 2 Гб. хочу на основании его создать еще один файл, который будет такой же как и исходный, но необходимо удалить из него байты с 1500 по 65000.
Идея сохранить набор сигнатуры и резать в цикле файл на части.
По теме из базы знаний
Найденные решения
5. SlavaKron 17.05.20 22:51 Сейчас в теме
(3)
но для чтения именно с 0-1499 получается мне еще раз надо читать данные

Вместо ПропуститьДо можно использовать ПрочитатьДо, чтобы еще раз не читать с начала. Примерно так:
Маркер = Новый БуферДвоичныхДанных(2);
Маркер[0] = 13;
Маркер[1] = 10;
	
ЧтениеДанных = Новый ЧтениеДанных(ИмяФайла);
РезультатЧтения = ЧтениеДанных.ПрочитатьДо(Маркер);
	
ФайловыйПоток = Новый ФайловыйПоток(ИмяНовогоФайла, РежимОткрытияФайла.Создать, ДоступКФайлу.Запись);
ФайловыйПоток.Записать(РезультатЧтения.ПолучитьБуферДвоичныхДанных(), 0, РезультатЧтения.Размер);
// далее уже использовать метод Пропустить или ПропуститьДо
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ipoloskov 164 17.05.20 17:19 Сейчас в теме
Мне кажется, надо смотреть в сторону ЧтениеДанных, ЗаписьДанных. Что-то вроде
Порция = ЧтениеДанных.Прочитать(1499);
ДвоичныеДанные = Порция.ПолучитьДвоичныеДанные();
ЗаписьДанных.Записать(ДвоичныеДанные);
Порция = ЧтениеДанных.Прочитать(65000 - 1500);
и так далее
3. user664038_av.lebedev 17.05.20 20:20 Сейчас в теме
(2)
ЧтениеДанных.Прочитать(1499);

Понимаю, что нужно читать и записывать. Но когда я читаю ПропуститьДо указываю разделитель поиска 13,10 Символы.ПС + Символы.ВК. Указываю дохожу до ПозицииПотока, 1499 но для чтения именно с 0-1499 получается мне еще раз надо читать данные. не пойму как найти нужный набор и прочитать с точки 0 до точки поиска, что бы и читать и записывать за 1 раз. А иначе Чтение идет с точки где был найден разделитель. Просто не каждый раз мне нужно получать данные 1500 - 65000.
4. user664038_av.lebedev 17.05.20 20:29 Сейчас в теме
(3)
Просто не каждый раз мне нужно получать данные 1500 - 65000.

Хорошо знаю что нужно (файлы разобраны по байтам), но не знаю как 1С объектами организовать оптимальный обход поиском при чтении и минимальными действиями на запись.
5. SlavaKron 17.05.20 22:51 Сейчас в теме
(3)
но для чтения именно с 0-1499 получается мне еще раз надо читать данные

Вместо ПропуститьДо можно использовать ПрочитатьДо, чтобы еще раз не читать с начала. Примерно так:
Маркер = Новый БуферДвоичныхДанных(2);
Маркер[0] = 13;
Маркер[1] = 10;
	
ЧтениеДанных = Новый ЧтениеДанных(ИмяФайла);
РезультатЧтения = ЧтениеДанных.ПрочитатьДо(Маркер);
	
ФайловыйПоток = Новый ФайловыйПоток(ИмяНовогоФайла, РежимОткрытияФайла.Создать, ДоступКФайлу.Запись);
ФайловыйПоток.Записать(РезультатЧтения.ПолучитьБуферДвоичныхДанных(), 0, РезультатЧтения.Размер);
// далее уже использовать метод Пропустить или ПропуститьДо
Показать
6. user664038_av.lebedev 17.05.20 23:08 Сейчас в теме
(5)
ить или ПропуститьДо

(5)
РезультатЧтения = ЧтениеДанных.ПрочитатьДо(Маркер);


Спасибо огромное.
Сам с тормозил. выполнял метод но не присваивал его в переменную и не мог понять как получить РезультатЧтенияДанных.
ЧтениеДанных.ПрочитатьДо(Маркер);

Все взлетело, спс всем. Ура!!!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот