Чтение/запись структуры - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! Есть файл, в который записана структура. По сути это дерево и соответственно в каждом узле есть поле типа самого узла. Вот как они записаны на C++ и Delphi. Как ее правильно объявить в C# и как потом считывать?
#pragma pack(1)
typedef struct TNode
{
    char Name[11];
    void *Parent;
    bool Checked;
    int LinksCount;
    DWORD Indexes[15];
    TNode *Links[15];
}Tnode;
#pragma pack(pop)
type PNode = ^Tnode;
TNode = packed Record
  Name: String[10];
  Parent: Pointer;
  Checked: boolean;
  LinksCount: integer;
  Indexes: array [0..14] of DWORD;
  Links: array [0..14] of PNode;
End;
Проблема в Parent и в массивах... На данный момент считываю все (кроме 2х последних массивов) в массив байт и ч-з маршалинг передаю в переменную, затем по одному считываю массив Indexes, затем просто пропускаю Links в файле, начинаю считывать следующие узлы и присваиваю их элементам Links. Но как-то это кривовато... Мб есть способ просто считать целиком узел ничего не пропуская? И как узел записать в файл?

Решение задачи: «Чтение/запись структуры»

textual
Листинг программы
public class TNode
{
    public string Name = new string(new char[11]);
    public object Parent;
    public bool Checked;
    public int LinksCount;
    public uint[] Indexes = new uint[15];
    public TNode[] Links = Arrays.InitializeWithDefaultInstances<TNode>(15);
}
//  This class can be used by anyone provided that the copyright notice remains intact.
internal static class Arrays
{
    internal static T[] InitializeWithDefaultInstances<T>(int length) where T : new()
    {
        T[] array = new T[length];
        for (int i = 0; i < length; i++)
        {
            array[i] = new T();
        }
        return array;
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5