|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|||||||||||
Дописать байты в файл и извлечь19.03.2015, 00:17. Показов 2979. Ответов 20
Метки нет (Все метки)
Проблема в целом довольно проста...
Требуется скажем так, вшить байты в файл, а затем извлечь их... Например у нас есть фото, мы дописываем туда заданные байты, а после, извлекаем... Проблемы в том что бы прочесть и дописать - нет, но вот в том, что бы поставить какой-то разделитель между файлом и дописываемыми байтами - есть... Я понимаю структуру, которая должна получиться... Байты файла + разделитель + дописываемые байты... Затем считываем байты и анализируем их, если находим разделитель, то все после него - наши байты... Так сам вопрос, как сделать этот разделитель? выходить должно что-то вроде подобного...
0
|
|||||||||||
| 19.03.2015, 00:17 | |
|
Ответы с готовыми решениями:
20
Дописать байты в файл (WriteAllBytes) Написать программу, которая бы считывала из входного файла байты с N1 по N2 и с N3 по N4 и записывала эти байты в выходной файл
|
|
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
|
|
| 19.03.2015, 01:10 | |
|
6cnitymi, может быть вы не в курсе, в System.Drawing.Imaging есть класс PropertyItem, который как раз используется для извлечения и изменения метаданных файлов изображений. Может, не стоит городить огород?
0
|
|
|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|
| 19.03.2015, 01:14 [ТС] | |
|
MrCrown, Вы меня не поняли...
файл изображения я привёл как пример... вместо него можно взять например архив типа RAR, или текстовый документ, или любой другой файл...
0
|
|
|
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
|
|
| 19.03.2015, 01:29 | |
|
6cnitymi, теоретически в любом файле должны быть какие то метаданные. Но вот как с ними работать...
0
|
|
|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|
| 19.03.2015, 01:35 [ТС] | |
|
MrCrown,
![]() мне не нужны метаданные)) мне нужно дописать в любой файл определённые байты... например, слить вместе два файла в один... а затем, разделить вновь на два...
0
|
|
|
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
|
|
| 19.03.2015, 01:51 | |
|
6cnitymi, а что если сделать его в виде экземпляра GUID, например, и потом искать его регуляркой
0
|
|
|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|
| 19.03.2015, 02:08 [ТС] | |
|
MrCrown, не совсем Вас понял...
Поясните...
0
|
|
|
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
|
||||||
| 19.03.2015, 02:21 | ||||||
|
6cnitymi, GUID это глобальный уникальный идентификатор
0
|
||||||
|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|
| 19.03.2015, 02:25 [ТС] | |
|
MrCrown, значит я Вас верно понял...
моя проблема заключается самой записи и считывании разделителя...
0
|
|
|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|
| 19.03.2015, 04:46 [ТС] | |
|
MrCrown, мы явно не понимаем друг друга
![]() как дописать байты я знаю (хотя в вопросе реализовано через создание нового файла), проблема в самом разделителе... В каком он должен быть виде? Понятное дело, что в виде байт, но это единственное, что мне понятно
0
|
|
|
COM‐пропагандист
|
|
| 19.03.2015, 11:27 | |
|
6cnitymi, всё просто: разделитель должен быть такой последовательностью байт, которая никогда не встретится в файле, что обеспечит его уникальность.
А не проще ли воспользоваться альтернативными потоками данных? http://windowsnotes.ru/other/a... yx-v-ntfs/
1
|
|
|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|
| 19.03.2015, 12:25 [ТС] | |
|
Замабувараев, Благодарю, интересная информация, но интересует реализация именно через средства Visual Studio..
0
|
|
|
COM‐пропагандист
|
||||||
| 19.03.2015, 12:44 | ||||||
|
6cnitymi, ну лол же. Да обычные файловые операции, ничего нового. Поток можно создать на любом существующем файле:
1
|
||||||
|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|
| 19.03.2015, 14:48 [ТС] | |
|
Замабувараев, хм... вечером опробую такой подход... благодарю..
а как разделить вновь на два файла? и, как я понимаю, количество таких потоков к одному файлу можно задать неограниченное?
0
|
|
|
COM‐пропагандист
|
|||||||||||||||||||||
| 19.03.2015, 19:56 | |||||||||||||||||||||
Сообщение было отмечено Памирыч как решение
Решение
6cnitymi, не надо ничего делить. Нужно лишь читать данные из своего потока, который может иметь имя (указывается после двоеточия), а может и не иметь (тогда ничего не указывается).
Итак, простой FileStream не принимает имя файла с двоеточием. Выход в использовании API. Вот уже готовый модуль. Кликните здесь для просмотра всего текста
Как записывать в поток:
1
|
|||||||||||||||||||||
|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|||||||||||
| 20.03.2015, 04:16 [ТС] | |||||||||||
|
Замабувараев, Благодарю!
![]() Почитал информацию по альтернативным потокам... количество таких потоков к одному файлу как я понял, можно задать неограниченное, и лишь обращаться к ним по именам... но, не зная имени, поток не открыть? или же есть способ получить имена всех потоков, идущих с файлом? и, еще один важный вопрос - альтернативные потоки работают лишь в NTFS, выходит, перемещая файл в пространство с другой файловой системой, есть большой риск потерять информацию в альтернативных потоках? или она сохраниться? Добавлено через 5 часов 34 минуты Проверил, все работает корректно, но когда переносишь файл в пространство другой файловой системы, альтернативные потоки все таки полностью стираются... Это возвращает к необходимости использовать разделитель и первоначальный вариант... Как всё таки сделать этот разделитель? Перевести какой-то текстовый разделитель в байты и работать с ним?
![]() Добавлено через 5 минут По идеи, если дописывать в файл другие байты, он перестанет корректно отображаться, или прекратит отображаться вообще... (Могу ошибаться, но на сколько мне известно, дела обстоят именно так) Так существует ли способ вшивать в файл какую-то информацию, что бы не портить работоспособность этого файла, и при этом не терять прикреплённую информацию при перемещении\пересылке? Если не ошибаюсь, существуют же ПО, позволяющие например прятать файлы, вшивая их в другие файлы, даже изображения, без потери их работоспособности, следовательно, это реально реализовать...
0
|
|||||||||||
|
148 / 136 / 34
Регистрация: 28.02.2014
Сообщений: 165
|
|
| 22.03.2015, 04:31 | |
|
6cnitymi,
Посмотри вот здесь -Изменение данных в exe-файле по его же инициативе, там было реализовано что-то подобное.
0
|
|
|
COM‐пропагандист
|
|
| 22.03.2015, 07:44 | |
|
6cnitymi, короткий ответ: в общем случае никак.
А теперь развёрнутый ответ. Файлы бывают разных форматов, например двоичные и текстовые. С текстовыми файлами проще. Если попытаться в текстовый файл дозаписать какие‐то данные, то эти данные будут восприниматься как часть данных файла. Например, так можно попортить скрипты, исходный код. А если это будет командный файл, то там могут «случайно» оказаться какие‐нибудь инструкции для выполнения, например, удаление всей музыки из домашнего каталога. С двоичными файлами всё сложнее. Обычно они внутри размечены на секции и считываются по секциям, поэтому дозапись какие‐нибудь данных в такой файл может и не привести к его работоспособности. А может и привести. Например, можно склеить картинку и архив и получить раржпег. Если же нужно помещать информацию не просто в конец файла, где её прочитает любой с помощью какого‐нибудь текстового редактора, а модифицировать сами данные файла, то тут для типа файла должна быть своя реализация. Например, для картинок графическую информацию нужно представлять в виде двумерного массива Integer и изменять каждый последний бит этого числа. Со аудиофайлами также, там может происходить модуляция по частоте‐амплитуде, добавление‐удаление неслышимых человеку шумов и звуков. В любом случае получается файл с неоригинальными данными. И так для каждого типа файлов, потому что у каждого типа своя структура, которую нужно знать. В любом случае такая модифицирующая программа споткнётся на неизвестном типе файла и его испортит.
0
|
|
|
82 / 50 / 14
Регистрация: 28.10.2013
Сообщений: 200
|
|
| 22.03.2015, 22:06 [ТС] | |
|
vova2112, этот пример уже давно знаю и разбирал его...
мне не удалось настроить его так, что бы он корректно работал... запись и чтение возможны только в собственный файл... если указываешь какой-то другой, он портиться.. Замабувараев, спасибо, очень информативно... узнал много нового... ещё раз благодарю Вас за Ваши труды
0
|
|
| 22.03.2015, 22:06 | |
|
Помогаю со студенческими работами здесь
20
Как записать байты в файл? Неправильно записываются байты в файл Как перевести файл в байты и наоборот? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|