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