Двоичные файлы в C # - PullRequest
       17

Двоичные файлы в C #

0 голосов
/ 21 июня 2010

Я пишу проект на C # Я хочу сохранить класс в двоичном файле и затем прочитать этот файл на C. Я хочу знать, как я могу сделать это без сериализации и десериализации, пожалуйста, помогите мне

Ответы [ 4 ]

7 голосов
/ 21 июня 2010

Вы говорите о кроссплатформенной сериализации.

Несколько вариантов:

  • сериализация в виде текста (xml, json);в конце концов, текст все еще двоичный - и просто
  • сериализуйте его вручную
  • используйте сторонний кроссплатформенный сериализатор

Но что бы вы ни делали,используйте BinaryFormatter.Причина, по которой я подчеркиваю это, заключается в том, что, вероятно, вы увидите первое, что ищете для двоичной сериализации C #, но полностью не подходит для ваших целей.Формат проприетарный и включает информацию о типах, которая имеет смысл только в .NET (не совсем из неуправляемого C).

Я довольно привязан к "буферам протоколов" как API сериализации, и есть обе версии C # и C здесь .

4 голосов
/ 21 июня 2010

Сохранение состояния объекта в файле означает его сериализацию.

Чтение состояния объекта из файла означает его десериализацию.

У вас есть для использования сериализации / десериализации, чтобы делать то, что вы хотите.

Поскольку вам нужно делать это на разных языках, использование встроенных сериализаторов, вероятно, не очень поможет.

Вы можете использовать один из сериализаторов XML для части C #, но тогда придется анализировать XML в c.

Другой вариант - написать свой собственный serizlizer для этого. Таким образом, вы имеете полный контроль над форматом файла.

0 голосов
/ 21 июня 2010

Хотите сохранить класс?Это невозможно, поскольку классы скомпилированы в сборки (exe, dll) в .net.

Я думаю, что вы хотите сохранить состояние object или лучше подходит, struct вfile.

Вы можете записать все поля класса в файл, используя класс BinaryWriter.Также вы можете взглянуть на это .

0 голосов
/ 21 июня 2010

Полагаю, вы хотите, чтобы приложение C # записало файл. Затем отдельное приложение C / C ++ прочитало этот файл? Исходя из этого, в C # вам нужно изучить пространство имен System.IO и, в частности, класс FileStream.

Кстати, я бы порекомендовал написать проект библиотеки классов C #, который обрабатывает это чтение / запись через классы сериализации .NET, а затем вызывает его из вашего кода C # и использует COM ([assembly: ComVisible(true)]) для доступа ваш код .NET из вашего кода C / C ++.

...