Читаю файл...

Тема в разделе "Delphi - Система", создана пользователем ~DE~, 27 июн 2006.

Статус темы:
Закрыта.
  1. ~DE~

    ~DE~ Гость

    Здравствуйте!

    В общем, для того, чтоб считать из файла заголовок (первые 10 байт) объявляю такой тип данных:
    Код (Text):
    TFileHead = record
    case byte of
    0: (Head: array [0..9] of byte);
    1: (ID:array [0..2] of Char; // 3 байта
    Version:Word;  // 2 байта
    Flags:Byte;  // 1 байт
    Size: Dword);   // 4 байта
    end;         // итого все 10 байтов
    и, собственно, саму переменную:
    Код (Text):
    var fh: TFileHead;
    делаю следующее:
    Код (Text):
    file:=TFileStream.Create('name.ext', fmOpenRead);
    file.ReadBuffer(fh.Head,10);
    file.free;
    в результате:
    Код (Text):
    fh.Head = (0,1,2,3,4,5,6,7,8,9) // считалось правильно
    а остальное:
    Код (Text):
    fh.ID = (0,1,2)
    fh.version = (5,4)
    fh.flags = (6)
    fh.size = (??,??,9,8)
    Кто-нибудь подскажет ЧТО неправильно? :D
    Заранее благодарю всех кто откликнется.

    ----
    Добавлено позже:

    Хорошо, а кто-то может подсказать такие способы работы с файлами (интересует чтение из файла), чтобы хэндл на файл можно было передавать как параметр функции.
    Обычные способы assignfile/reset этого не позволяют. TFileStream позволяет, но при чтении данных как число байты идут в обратном направлении. Так вот, есть ли ЕЩЕ какие-либо способы???
    Подскажите пожалуйста!!!
     
  2. zubr

    zubr Гость

    1. Сделай вместо record - packed record и все заработает как надо.
    2.
    Насколько я помню, это особенность не функции, а Windows.
     
  3. ~DE~

    ~DE~ Гость

    zubr,
    Спасибо, помогло! :angry:
    Гмм... а есть какие-нибудь стандартные функции, чтоб байтам задать правильный порядок? Или это только руками делается?
     
  4. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    ntohl и компания)

    Скорее уж всей платформы x86
     
  5. ~DE~

    ~DE~ Гость

    Kmet,
    спасибо, конечно, что пролил свет на наши темные головы, а по сути вопроса что-нибудь посоветуешь?
     
  6. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    Всегда пожалуйста. По сути уже сказал.

    <!--QuoteBegin-Kmet+28:06:2006, 11:06 -->
    <span class="vbquote">(Kmet @ 28:06:2006, 11:06 )</span><!--QuoteEBegin-->ntohl и компания
    [snapback]39118" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Компания эта состоит из четырех функций(по две на WORD и на DWORD) которые и конвентируют из ТСР порядка(он прямой всегда) в порядок хоста (для х86 обратный) и обратно.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей