Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93

Запись структуры в файл - Как сделать так, чтобы в файл записывались только данные структуры?

29.09.2016, 11:17. Показов 4301. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System.Runtime.Serialization.Formatters.Binary;
 
[Serializable]
public struct wav
{
    public char a;
        public ulong b;
}
    wav w = new wav();
    w.a = "a"; 
    w.b = 10;
 
    FileStream fs = new FileStream("rec.dat", FileMode.Create);
 
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fs, wav);
...
При записи в файл этой структуры, в файл также записывается куча иной служебной информации. Как сделать так, чтобы в
файл записывались только данные структуры?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2016, 11:17
Ответы с готовыми решениями:

Запись структуры в файл
Доброго времени суток. Нашел множество способов записи структуры в файл. Есть ли метод "из коробки"?

Запись структуры в файл
Как на c# записать структуру в файл? c++ очень легко, просто fwrite fread, на c# даже не знаю как это написать :) подскажите. Файл...

Запись структуры в файл
Всем доброго времени, следующая проблема: Есть структура struct UserInfo { public string Name; public...

14
71 / 58 / 31
Регистрация: 05.09.2013
Сообщений: 666
29.09.2016, 11:22
А XmlSerializer не подойдет? там, вроде, ничего лишнего)
1
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 11:39
Валеронище, попробуйте воспользоваться связкой BinaryWriter / BinaryReader. В этом случае в файл будут записываться только те данные, которые Вам нужны (и формат записи данных также будет определяться Вами):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// using System.IO;
// using System.Text;
 
wav item = new wav { a = 'a', b = 10 };
 
FileStream fs = new FileStream("rec.dat", FileMode.Create);
 
BinaryWriter writer = new BinaryWriter(fs, Encoding.Default, true);
writer.Write(item.a);
writer.Write(item.b);
writer.Flush();
writer.Dispose();
 
fs.Seek(0L, SeekOrigin.Begin);
 
BinaryReader reader = new BinaryReader(fs, Encoding.Default, true);
wav newItem = new wav();
newItem.a = reader.ReadChar();
newItem.b = reader.ReadInt32();
reader.Dispose();
Либо, как вариант, можете обратить своё внимание на формат JSON: Json.NET
1
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93
29.09.2016, 13:24  [ТС]
bax_tang: как же после С++ все неудобно! А если структура большая и структур много?
halk0812: и как этим XmlSerialaizerom пользоваться в данном случае?
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 13:53
Цитата Сообщение от Валеронище Посмотреть сообщение
А если структура большая и структур много?
В этом случае стоит - на мой взгляд - рассмотреть другие способы сериализации объектов (уже упоминавшийся мной JSON, например).
1
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93
29.09.2016, 14:35  [ТС]
Да я понял конечно, но неужели нельзя проще как-то стандартными средствами, Jason это же надо доп модули скачивать и все такое?
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
29.09.2016, 14:45
Из стандартных средств - BinaryReader / BinaryWriter (всё ручками), XML-сериализация (более простая по реализации).
Для удобной сериализации в Json придётся, конечно, воспользоваться сторонними сборками, но что Вас в этом смущает?
1
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
29.09.2016, 14:49
Цитата Сообщение от Валеронище Посмотреть сообщение
Да я понял конечно, но неужели нельзя проще как-то стандартными средствами, Jason это же надо доп модули скачивать и все такое?
В .Net есть и JSON и XML без установки доп. библиотек.
1
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
29.09.2016, 15:31
Не надо скачивать.
Тынц

Вот недавно поднимал тему, там мне про JSON и рассказали.
1
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93
30.09.2016, 09:01  [ТС]
Все херня, даже через Jason передает метаданные, а мне надо значения структуры! Короче вопрос сводится к тому, как преобразовать структуру в массив байт, сериализация гавно!
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
30.09.2016, 09:05
Цитата Сообщение от Валеронище Посмотреть сообщение
Все херня, даже через Jason передает метаданные, а мне надо значения структуры! Короче вопрос сводится к тому, как преобразовать структуру в массив байт, сериализация гавно!
Фигня вопрос - напиши свой сериализатор.
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
30.09.2016, 09:21
Лучший ответ Сообщение было отмечено Валеронище как решение

Решение

Валеронище, пример кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System.Runtime.InteropServices;
 
// и далее где-то в Вашем коде:
int size = Marshal.SizeOf(typeof(wav));
 
wav item = new wav();
item.a = 'a';
item.b = 100500;
 
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(item, ptr, false);
 
byte[] structureData = new byte[size];
Marshal.Copy(ptr, structureData, 0, size);
 
Marshal.FreeHGlobal(ptr);
Учтите, что этот вариант намного медленне и неудобнее прямой сериализации в json (и более подвержен ошибкам), при которой данные структуры wav будут выглядеть как-то так:
JSON
1
{"a":"a","b":100500}
Добавлено через 9 минут
Валеронище, вот ссылка на работающий пример кода.
1
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93
30.09.2016, 10:04  [ТС]
Спасибо, я уже юзаю этот пример, но почему то со строки Marshal. StructureToPtr, проект перестает запускаться, выдает ошибку, хотя при построении ошибок нет, может надо где то unsafe использовать?
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
30.09.2016, 12:09
Валеронище, приведите полный код класса, для которого вызывается метод Marshal.StructureToPtr
0
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93
06.10.2016, 10:52  [ТС]
Спасибо! Ошибка возникала потому, что в структуре были массивы,и после того, как я начал использовать
[StructLayout(LayoutKind.Sequential, Pack = 1] при иниц. струкьуры с одновременной иниц-й полей массивов в ней [MarshalAs(UnmanagedType.ByValArray, SizeConst=32)], ошибка исчезла!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.10.2016, 10:52
Помогаю со студенческими работами здесь

Запись данных структуры в файл
Всем доброго времени суток, столкнулся с проблемой записи данных в бинарный файл, а именно: Научившись выделять своей структуре...

Запись структуры в бинарный файл
Собственно, вопрос в заголовке. Буду благодарна за помощь

Запись структуры в бинарный файл
Привет всем, тут такая проблема, мне нужно записать в бинарный файл структуру, а потом считать её. Например: у меня программа...

Файл: как сделать так, чтобы вводимые данные (которые считывались с клавиатуры) сразу записывались в файл?
Подскажите, пожалуйста, как сделать так, чтобы вводимые данные (которые считывались с клавиатуры) сразу записывались в файл, а потом уже...

Сделать так что бы в файл записывались только отличники
Ребят, программа рабочая, не могу только сделать так что бы в файл записывались только отличники, помогите #include "stdafx.h" ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru