Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
1 / 1 / 1
Регистрация: 16.11.2011
Сообщений: 55
.NET 4.x

Можно ли изменить или удалить данные в бинарном файле

30.05.2017, 14:37. Показов 7109. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В C# есть класс BinaryWriter, который позволяет записывать данные в бинарный файл. Но, везде указано, как добавлять данные в бинарный файл, в конец файла, а можно ли внести изменение в середину файла, или удалить данные из середины файла. Допустим есть класс с атрибутами, скажим пару int, и пару string, и есть класс коллекции для предыдущего класса, с десятком готовых экземпляров. Далее в бинарный файл последовательно, атрибут за атрибутом, сохраняется вся коллекция. Далее происходит изменение какого либо экземпляра класса из коллекции, и, чтобы полностью не перезаписывать весь бинарный файл, хотелось бы изменять скажем только часть файла, начиная с изменившегося экземпляра. Или при удалении, не создавать фактически снова весь файл, а удалить ненужный экземпляр коллекции, и далее просто дозаписать всю оставшуюся часть коллекции вместо удаленного экземпляра, и до конца коллекции.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2017, 14:37
Ответы с готовыми решениями:

Изменить слово в бинарном файле
Всем привет! У меня есть некое приложение которое должно изменить значение в бинарном файле. Это можно сделать открыв файт в блокноте...

Не получается изменить данные в бинарном файле
Здравствуйте. Мучаюсь, не пойму как сделать чтобы изменить данные. Программа обращается к файлу с базой (структуре).В структуре счет,...

Как изменить один байт в бинарном файле?
Здравствуйте. Второй день бьюсь над вопросом, просмотрел много примеров, но не понимаю, помогите. Мне нужно изменить один байт в...

3
0 / 0 / 2
Регистрация: 30.05.2017
Сообщений: 11
30.05.2017, 14:51
Запись данных в бинарный файл с определенной позиции

не подходит?
0
1 / 1 / 1
Регистрация: 16.11.2011
Сообщений: 55
30.05.2017, 15:36  [ТС]
Тут есть несколько проблем. Во первых, в этом примере, используется только int32, 4-байтовый, и можно вычислить смещение, и заменить значение, при этом даже размер файла не уменьшится. В случае же со string, как я понимаю, размер данных будет зависеть от количество символов. И если даже взять просто одну строку string, размером в 100 символов, то после замены середины файла, количество символов может просто уменьшится, а что при этом будет с оставшейся частью файла? Кроме того, я никак не могу в принципе вычислить размер экземпляра класса, или хотя бы размер инициализированной переменной типа string.

Добавлено через 20 минут
Да, string вычислить можно, просто надо количество символов перемножить на размер одного символа в нужной кодировке. Но вот вычислить, сколько займет места в бинарном файле с десяток атрибутов класса, весьма трудно, а ведь потом чтобы сместиться в нужную позицию файла, надо точно знать, сколько места занимает каждый сохраненный экземпляр класса коллекции.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
31.05.2017, 08:54
Лучший ответ Сообщение было отмечено paradox81ru как решение

Решение

paradox81ru,
1) Зачем вам это нужно? Такие манипуляции обычно нужны если у вас ну очень большой объем файла и очень критично быстродействие. Если это не так, то нужно просто читать файл в память, выполнять манипуляции а потом уже сохранять обратно.
2) Прямых методов вставки данных внутрь файла не существует (есть только запись поверх). Даже если бы и было, то по любому системе придется смещать и копировать хвост файла, то есть фактически делать пункт 1, но на более низком уровне.
3) А если уж все таки очень нужно, то такие вещи достигаются специальной структурой файла. Внутри файла запись идет отдельными блоками ("записями") и порядок записей регулируется не их последовательностью в файле, а специальной таблицей (типа FAT) или отдельным списком. Тогда вместо вставки записи внутрь файла, запись дописывается в конец, и меняется соотв образом таблица.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2017, 08:54
Помогаю со студенческими работами здесь

Удалить запись в бинарном файле
Доброго временни суток, пишу функции записи/чтения. В приложении есть массив очень сложных объектов класса с множеством структур и векторов...

Удалить строку в бинарном файле
Подскажите, пожалуйста, как удалить определенную строку из бинарного файла (.bin)? дельфи.

Секретные данные в бинарном файле
Есть некие данные. Структура определена в h-файле, данные записываются в бинарный файл сплошной структурой с помощью одной программы,...

Изменить положение камеры в существующем .exe файле 3D приложения, или как можно сместить камеру в 3D приложении
К сожалению, спрятать лишний треп под спойлер у меня не вышло. Прошу меня извинить Х) Изначально суть моей проблемы была в попытке...

Можно ли удалить или вставить данные в базу в global.asa при событии session_onEnd ?
Вот этот скрипт при событии session_OnEnd не выполняется то есть данные из базы не удаляются тогда как если вставить код в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru