Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение целых структур из файла, как конвертировать прочитаное 
:(
    Опции темы
megel
Дата 31.5.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.5.2008

Репутация: нет
Всего: нет



на с++ :

struct s
{
int a;
int b;
char c;
};


s data;

FILE* file = new FILE(...);

fread((char*)data, sizeof(s), 1, file);

как сделать на С# ? smile 
PM MAIL   Вверх
marcusmae
Дата 31.5.2008, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



megel, наверно сишники за такой код не похвалят. По кр. мере ИМХО, чтение из файла в таком виде небезопасно из-за выравнивания структур. То есть, неизвестно, выровнены ли данные в файле по модулю 2 или 4, ... равно как неизвестен sizeof(s). Всё это конечно контролируется, но лично я предпочитаю вообще без дебрей. Предположим, что в файле ничего не выровнено, данные уложены, как 4-4-1, тады так :

Код

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace ConsoleApplication6
{
    struct S
    {
        public int a, b;
        public byte c;
    }

    class Program
    {
        const string filename = "file.txt";
        const int recordsCount = 10;

        static void Main(string[] args)
        {
            S[] s = new S[recordsCount];

            using (BinaryReader binaryReader = new BinaryReader(
                new StreamReader(filename).BaseStream))
            {
                for (int recordIndex = 0; recordIndex < recordsCount; recordIndex++)
                {
                    s[recordIndex].a = binaryReader.ReadInt32();
                    s[recordIndex].b = binaryReader.ReadInt32();
                    s[recordIndex].c = binaryReader.ReadByte();
                }
            }
        }
    }
}


Код считывает в цикле 10 троек Int32-Int32-Byte и кидает их в соотв элементы массива структур. Чтобы не путаться с кодировками, char заменён на byte, хуже не будет smile 


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
jonie
Дата 1.6.2008, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



можно мутить с сериализацией (и BinaryFormatter-ом)... пусть сам париться на считывание и на запись имхо... да и более привычно, наверно, для глаз .net кодеров...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
megel
Дата 1.6.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.5.2008

Репутация: нет
Всего: нет



marcusmae, jonie спасибо
сделал по членное чтение  smile 
сеарелизатом не получается, наыерно он работает только для чтения данных записаных функцией serealize

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.