Где Взять класс С++ для работы с файлами более 2Гб.

Тема в разделе "WASM.WIN32", создана пользователем OtD, 19 мар 2005.

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

    OtD Member

    Публикаций:
    0
    Регистрация:
    19 мар 2005
    Сообщения:
    31
    Адрес:
    Алма-Ата, Kazakhstan
    Ребята, помогите в поиске путёвого класса для работы с большими файлами. То есть с 64-х битными числами. И ещё желателен класс типа int64 и uint64. Пишу на С++.

    Сам уже начал писать оба класса, но думаю это затянется.

    Заранее Всем большое спасибо.
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    с большими файлами. То есть с 64-х битными числами



    но думаю это затянется



    Ты прав. Во всяком случае до тех пор, пока ты не объяснишь нормальным человеческим языком, чего тебе надо?



    1. С файлами или числами?

    2. Что должен делать класс? Функциональность?

    3. Предлагаемые методы?
     
  3. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia


    классная логика :) а связь какая между этими двумя явлениями? :)





    в Mcrosoftовском Visual C++ есть встроенный тип __int64





    Да, написать 64-битную арифметику с помощью готовой 32-х битной безумно сложно... минут 30, наверное, потратить нужно :dntknw:
     
  4. OtD

    OtD Member

    Публикаций:
    0
    Регистрация:
    19 мар 2005
    Сообщения:
    31
    Адрес:
    Алма-Ата, Kazakhstan
    Ну, ребята Вы меня разгромили. :)

    Попытаюсь более детально.

    Поясню, я пишу на BC5 и у меня нет встроенного класса int64, по этому я предпологаю что где-то он есть в библиотеки, и он мне нужен.

    Второе, мне нужен класс для работы с файлами более 2Гб, а это значит что опперирует этот класс 64-х битными целыми.

    А написать класс int64 под 32-х битную машину за 30 минут это :).

    Вроде всё объяснил.
     
  5. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia


    нет, это объективная реальность.



    пару лет назад я видел нечто подобное 64-битное на sources.ru
     
  6. amitophia

    amitophia New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2004
    Сообщения:
    44
    OtD

    У тебя BC5 или Borland C++ Builder 5?

    В BCB5 есть __int64 (c двумя знаками подчёркивания перед int64)
     
  7. OtD

    OtD Member

    Публикаций:
    0
    Регистрация:
    19 мар 2005
    Сообщения:
    31
    Адрес:
    Алма-Ата, Kazakhstan
    flankerx

    "нет, это объективная реальность."

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



    amitophia

    Нет не Builder 5, а BC5.

    Не знаешь, он встроенный в BCB5 или в либе?

    Спасибо.



    volodya

    "2. Что должен делать класс? Функциональность?"

    Да пускай хотя бы простые стандартные операции под Win32 или как например TFile class.
     
  8. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Да пускай хотя бы простые стандартные операции под Win32 или как например TFile class.



    :-\



    Мда... И еще раз, мда...

    Стандартными WinAPI можно работать с файлами ЛЮБОЙ длины. Просто читай последовательно блоками, делай, что надо, записывай назад.

    Я ведь не случайно задавал вопрос о функциональности... Ты сначала сам определись, что тебе нужно, а уж потом других на уши ставь :)
     
  9. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
  10. OtD

    OtD Member

    Публикаций:
    0
    Регистрация:
    19 мар 2005
    Сообщения:
    31
    Адрес:
    Алма-Ата, Kazakhstan
    :) Вот ты меня volodya прикалываешь, как в фильме: - "Он же памятник, кто ж его посадит."

    На то я класс и ищу, чтобы с функциями Win32 не возиться, чтобы единая система обработки исключений была и другие полезности класса. Сам представляешь какой бардак будет с этими функциями.

    Вопрос остаётся открытым, класс нужен. Наверно и не мне одному. :)
     
  11. OtD

    OtD Member

    Публикаций:
    0
    Регистрация:
    19 мар 2005
    Сообщения:
    31
    Адрес:
    Алма-Ата, Kazakhstan
    AsmGuru62

    Спасибо за ссылку, но там так и сказано что "Ваш С компилятор может поддерживать 64-битные целые".

    Note Your C compiler may support 64-bit integers natively. For example, Microsoft® Visual C++® supports the __int64 sized integer type. For more information, see the documentation included with your C compiler.

    А у меня не поддерживает BC5.
     
  12. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia


    ты бы хоть попробовал сначала, чтоли... а потом бы уже всякую ерунду говорил. Тебе нужно реализовать _четыре_ основные функции, три из которых тривиальны. о каких сложностях идет речь???





    Для тех кто в бронепоезде: а если ваш компилятор не поддерживает 64-битную арифметику -- используйте структуру LARGE_INTEGER.



    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winpr og/winprog/large_integer_str.asp
     
  13. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Вопрос остаётся открытым, класс нужен. Наверно и не мне одному. :)



    До тех пор, пока ты внятно не скажешь, чего тебе от этого класса нужно - так и будешь сам что-то кропать, пока не позеленеешь.
     
  14. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87
    а попробовать



    typedef long long int int64;



    У меня просто нету bc5 чтобы проверить, а в gcc это сработает.
     
  15. OtD

    OtD Member

    Публикаций:
    0
    Регистрация:
    19 мар 2005
    Сообщения:
    31
    Адрес:
    Алма-Ата, Kazakhstan
    flankerx

    Объясняю для тех кто в "бронепоезде":

    1. Если нужен 64-х разрядный тип целых чисел, то он (класс) должен поддерживать все операции что и стандартный тип int или char, а если ты выучил только четыре операции которые придумал Аль Хоризми, то подучи ещё язык программирования :).

    2. Если до сих пор не въехал, привожу пример спецификации заголовочного файла, и то только для натуральных чисел:
    Код (Text):
    1.  
    2. // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::
    3. //
    4. //  КЛАСС: ODKNB64
    5. //
    6. //  НАЗНАЧЕНИЕ:
    7. //      1. Обеспечивает работу с целыми без знака 64-х битными числами.
    8. class _ODK_DLL ODKNB64
    9. {   public:
    10.       NB32  EK_1; // Меньная часть.
    11.       NB32  EK_2; // Большая часть.
    12.  
    13.       _ODK_DLL// Для экспорта дружественных функций __declspec(dllexport).
    14.  
    15. // Конструкторы:
    16.       ODKNB64(){}
    17.       ODKNB64(NB32 dwArg):EK_1(dwArg), EK_2(0UL){}
    18.       ODKNB64(NB32 dwArg2, NB32 dwArg):EK_1(dwArg), EK_2(dwArg2){}
    19.       ~ODKNB64(){}
    20. // Функции операторы: + - * / % == != <= < >= > += -= *= /= %= << >>  = [] () ->
    21.    // Манипулирование битами с присвоением операторы: |= ^= &= <<= >>=
    22.       // Побитовое ИЛИ |=:
    23.       ODKNB64& operator|=(kODKNB64& KUI64)
    24.                              {EK_1|=KUI64.EK_1; EK_2|=KUI64.EK_2; return *this;}
    25.       ODKNB64& operator|=(NB32 dwArg)               {EK_1|=dwArg; return *this;}
    26.       friend NB32& operator|=(NB32& dwArg, kODKNB64& KUI64)
    27.                                               {dwArg|=KUI64.EK_1; return dwArg;}
    28.       // Побитовое исключающее ИЛИ ^=:
    29.       ODKNB64& operator^=(kODKNB64& KUI64)
    30.                              {EK_1^=KUI64.EK_1; EK_2^=KUI64.EK_2; return *this;}
    31.       ODKNB64& operator^=(NB32 dwArg)               {EK_1^=dwArg; return *this;}
    32.       friend NB32& operator^=(NB32& dwArg, kODKNB64& KUI64)
    33.                                               {dwArg^=KUI64.EK_1; return dwArg;}
    34.       // Побитовое И &=:
    35.       ODKNB64& operator&=(kODKNB64& KUI64)
    36.                              {EK_1&=KUI64.EK_1; EK_2&=KUI64.EK_2; return *this;}
    37.       ODKNB64& operator&=(NB32 dwArg)               {EK_1&=dwArg; return *this;}
    38.       friend NB32& operator&=(NB32& dwArg, kODKNB64& KUI64)
    39.                                               {dwArg&=KUI64.EK_1; return dwArg;}
    40.       // Побитовый сдвиг влево <<=:
    41.       ODKNB64& __fastcall operator<<=(kODKNB64& KUI64);
    42.       ODKNB64& __fastcall operator<<=(NB32 dwArg);
    43.       friend NB32& __fastcall operator<<=(NB32& dwArg, kODKNB64& KUI64);
    44.       // Побитовый сдвиг вправо >>=:
    45.       ODKNB64& __fastcall operator>>=(kODKNB64& KUI64);
    46.       ODKNB64& __fastcall operator>>=(NB32 dwArg);
    47.       friend NB32& __fastcall operator>>=(NB32& dwArg, kODKNB64& KUI64);
    48.    // Манипулирование битами операторы: ~ | ^ & << >>
    49.       // Побитовое НЕТ ~:
    50.       ODKNB64 __fastcall operator~();
    51.       // Побитовое ИЛИ |:
    52.       ODKNB64 __fastcall operator|(kODKNB64& KUI64) const;
    53.       ODKNB64 __fastcall operator|(NB32 dwArg) const;
    54.       friend ODKNB64 __fastcall operator|(NB32 dwArg, kODKNB64& KUI64);
    55.       // Побитовое исключающее ИЛИ ^:
    56.       ODKNB64 __fastcall operator^(kODKNB64& KUI64) const;
    57.       ODKNB64 __fastcall operator^(NB32 dwArg) const;
    58.       friend ODKNB64 __fastcall operator^(NB32 dwArg, kODKNB64& KUI64);
    59.       // Побитовое И &:
    60.       ODKNB64 __fastcall operator&(kODKNB64& KUI64) const;
    61.       ODKNB64 __fastcall operator&(NB32 dwArg) const;
    62.       friend ODKNB64 __fastcall operator&(NB32 dwArg, kODKNB64& KUI64);
    63.       // Побитовый сдвиг влево <<:
    64.       ODKNB64 __fastcall operator<<(kODKNB64& KUI64) const;
    65.       ODKNB64 __fastcall operator<<(NB32 dwArg) const;
    66.       friend ODKNB64 __fastcall operator<<(NB32 dwArg, kODKNB64& KUI64);
    67.       // Побитовый сдвиг вправо >>:
    68.       ODKNB64 __fastcall operator>>(kODKNB64& KUI64) const;
    69.       ODKNB64 __fastcall operator>>(NB32 dwArg) const;
    70.       friend ODKNB64 __fastcall operator>>(NB32 dwArg, kODKNB64& KUI64);
    71.    // Логические операторы:  ! || &&
    72.       // НЕ:
    73.       NB32 operator!() const                              {return !(EK_1|EK_2);}
    74.       // ИЛИ:
    75.       NB32 operator||(kODKNB64& KUI64) const
    76.                                   {return (EK_1|EK_2)||(KUI64.EK_1|KUI64.EK_2);}
    77.       NB32 operator||(NB32 dwArg) const             {return (EK_1|EK_2)||dwArg;}
    78.       friend NB32 operator||(NB32 dwArg, kODKNB64& KUI64)
    79.                                         {return dwArg||(KUI64.EK_1|KUI64.EK_2);}
    80.       // И:
    81.       NB32 operator&&(kODKNB64& KUI64) const
    82.                                   {return (EK_1|EK_2)&&(KUI64.EK_1|KUI64.EK_2);}
    83.       NB32 operator&&(NB32 dwArg) const             {return (EK_1|EK_2)&&dwArg;}
    84.       friend NB32 operator&&(NB32 dwArg, kODKNB64& KUI64)
    85.                                         {return dwArg&&(KUI64.EK_1|KUI64.EK_2);}
    86.    // Отношений операторы: == != <= < >= >
    87.       // Равно:
    88.       bool __fastcall operator==(kODKNB64& KUI64) const;
    89.       bool __fastcall operator==(NB32 dwArg) const;
    90.       friend bool __fastcall operator==(NB32 dwArg, kODKNB64& KUI64);
    91.       // Не равно:
    92.       bool __fastcall operator!=(kODKNB64& KUI64) const;
    93.       bool __fastcall operator!=(NB32 dwArg) const;
    94.       friend bool __fastcall operator!=(NB32 dwArg, kODKNB64& KUI64);
    95.       // Меньше или равно:
    96.       bool __fastcall operator<=(kODKNB64& KUI64) const;
    97.       bool __fastcall operator<=(NB32 dwArg) const;
    98.       friend bool __fastcall operator<=(NB32 dwArg, kODKNB64& KUI64);
    99.       // Меньше:
    100.       bool __fastcall operator<(kODKNB64& KUI64) const;
    101.       bool __fastcall operator<(NB32 dwArg) const;
    102.       friend bool __fastcall operator<(NB32 dwArg, kODKNB64& KUI64);
    103.       // Больше или равно:
    104.       bool __fastcall operator>=(kODKNB64& KUI64) const;
    105.       bool __fastcall operator>=(NB32 dwArg) const;
    106.       friend bool __fastcall operator>=(NB32 dwArg, kODKNB64& KUI64);
    107.       // Больше:
    108.       bool __fastcall operator>(kODKNB64& KUI64) const;
    109.       bool __fastcall operator>(NB32 dwArg) const;
    110.       friend bool __fastcall operator>(NB32 dwArg, kODKNB64& KUI64);
    111.    // Математические операторы: += + ++ -= - -- *= * /= / %= %
    112.      // Плюс: += + ++  // При переполнении результат максимальный:
    113.       // Сложение с присвоением результата: +=
    114.       ODKNB64& __fastcall operator+=(kODKNB64& KUI64);
    115.       ODKNB64& __fastcall operator+=(NB32 dwArg);
    116.       friend NB32& __fastcall operator+=(NB32& dwArg, kODKNB64& KU64P);
    117.       // Сложение: +
    118.       friend ODKNB64 __fastcall operator+(kODKNB64& KU64L, kODKNB64& KU64P);
    119.       friend ODKNB64 __fastcall operator+(kODKNB64& KU64L, NB32 dwArg);
    120.       friend ODKNB64 __fastcall operator+(NB32 dwArg, kODKNB64& KU64P);
    121.       // Пред и пост инкримент выполняются как пред инкремент: ++
    122.       friend ODKNB64& __fastcall operator++(ODKNB64& KU64L);
    123.      // Минус: -= - --  // При разнице меньше нуля результат = 0:
    124.       // Вычитание с присвоением результата: -=
    125.       ODKNB64& __fastcall operator-=(kODKNB64& KUI64);
    126.       ODKNB64& __fastcall operator-=(NB32 dwArg);
    127.       friend NB32& __fastcall operator-=(NB32& dwArg, kODKNB64& KU64P);
    128.       // Вычитание: -
    129.       friend ODKNB64 __fastcall operator-(kODKNB64& KU64L, kODKNB64& KU64P);
    130.       friend ODKNB64 __fastcall operator-(kODKNB64& KU64L, NB32 dwArg);
    131.       friend ODKNB64 __fastcall operator-(NB32 dwArg, kODKNB64& KU64P);
    132.       // Пред и пост декримент выполняются как пред декримент: --
    133.       friend ODKNB64& __fastcall operator--(ODKNB64& KUI64);
    134.      // Умножить: *= *  // При переполнении результат максимальный:
    135.       // Умножение с присвоением результата: *=
    136.       ODKNB64& __fastcall operator*=(kODKNB64& KUI64);
    137.       ODKNB64& __fastcall operator*=(NB32 dwArg);
    138.       friend NB32& __fastcall operator*=(NB32& dwArg, kODKNB64& KU64P);
    139.       // Умножение: *
    140.       friend ODKNB64 __fastcall operator*(kODKNB64& KU64L, kODKNB64& KU64P);
    141.       friend ODKNB64 __fastcall operator*(kODKNB64& KU64L, NB32 dwArg);
    142.       friend ODKNB64 __fastcall operator*(NB32 dwArg, kODKNB64& KU64P);
    143.      // Разделить: /= / :
    144.       // Деление с присвоением результата: /=
    145.       ODKNB64& __fastcall operator/=(kODKNB64& KUI64);
    146.       ODKNB64& __fastcall operator/=(NB32 dwArg);
    147.       friend NB32& __fastcall operator/=(NB32& dwArg, kODKNB64& KU64P);
    148.       // Деление: /
    149.       friend ODKNB64 __fastcall operator/(kODKNB64& KU64L, kODKNB64& KU64P);
    150.       friend ODKNB64 __fastcall operator/(kODKNB64& KU64L, NB32 dwArg);
    151.       friend ODKNB64 __fastcall operator/(NB32 dwArg, kODKNB64& KU64P);
    152.      // Разделить по модулю: %= %  :
    153.       // Деление по модулю с присвоением результата: %=
    154.       ODKNB64& __fastcall operator%=(kODKNB64& KUI64);
    155.       ODKNB64& __fastcall operator%=(NB32 dwArg);
    156.       friend NB32& __fastcall operator%=(NB32& dwArg, kODKNB64& KU64P);
    157.       // Деление по модулю: %
    158.       friend ODKNB64 __fastcall operator%(kODKNB64& KU64L, kODKNB64& KU64P);
    159.       friend ODKNB64 __fastcall operator%(kODKNB64& KU64L, NB32 dwArg);
    160.       friend ODKNB64 __fastcall operator%(NB32 dwArg, kODKNB64& KU64P);
    161.       // Присвоение:
    162.       ODKNB64& operator=(NB32 Arg)     {EK_2=0UL; EK_1=(NB32)Arg; return *this;}
    163.       ODKNB64& operator=(ONB32 Arg)
    164.       {if(Arg==-1){EK_1=EK_2=-1;} else if(Arg<0){EK_1=EK_2=0UL;}
    165.                                        else {EK_1=Arg; EK_2=0UL;} return *this;}
    166.       ODKNB64& operator=(NB8 Arg)                 {return operator=((NB32)Arg);}
    167.       ODKNB64& operator=(ONB8 Arg)               {return operator=((ONB32)Arg);}
    168.       ODKNB64& operator=(NB16 Arg)                {return operator=((NB32)Arg);}
    169.       ODKNB64& operator=(ONB16 Arg)              {return operator=((ONB32)Arg);}
    170.       ODKNB64& __fastcall operator=(const float& f32);
    171.       ODKNB64& __fastcall operator=(const double& fd64);
    172.       ODKNB64& __fastcall operator=(const long double& fld80);
    173.       // Начисление:
    174.       ODKNB64& operator()()                  {EK_1=0UL; EK_2=0UL; return *this;}
    175.       ODKNB64& operator()(NB32 dwArg)      {EK_1=dwArg; EK_2=0UL; return *this;}
    176.       ODKNB64& operator()(NB32 dwArg2, NB32 dwArg)
    177.                                         {EK_1=dwArg; EK_2=dwArg2; return *this;}
    178.       // Для преобразования к типу unsigned int:
    179.       operator unsigned int() const                               {return EK_1;}
    180. #ifdef __ODDEF32_H
    181.       // Для преобразования в логическое выражение типа int:
    182.       operator DANET() const                               {return (EK_1|EK_2);}
    183. #elif _WINDEF_
    184.       // Для преобразования в логическое выражение типа int:
    185.       operator BOOL() const                                {return (EK_1|EK_2);}
    186. #else
    187.       // Для преобразования к типу int:
    188.       operator int() const                                        {return EK_1;}
    189. #endif
    190.       // Для преобразования к типу логическое выражение в 1 байт:
    191.       operator bool() const                                {return (EK_1|EK_2);}
    192.       // Для преобразования к типу unsigned long:
    193.       operator NB32() const                                       {return EK_1;}
    194.       // Для преобразования к типу long:
    195.       operator long() const                                       {return EK_1;}
    196.       // Для преобразования к типу NB16:
    197.       operator NB16() const                                       {return EK_1;}
    198.       // Для преобразования к типу short:
    199.       operator short() const                                      {return EK_1;}
    200.       // Для преобразования к типу unsigned char:
    201.       operator unsigned char() const                              {return EK_1;}
    202.       // Для преобразования к типу char:
    203.       operator char() const                                       {return EK_1;}
    204.       // Для преобразования к типу const char*:
    205.       //operator const char*() const {return EK_1;}
    206.       // Для преобразования к типу float. Загружает в FPU.387.:
    207.       __fastcall operator float() const;
    208.       // Для преобразования к типу double. Загружает в FPU.387.:
    209.       __fastcall operator double() const;
    210.       // Для преобразования к типу long double. Загружает в FPU.387.:
    211.       __fastcall operator long double() const;
    212. // Функции: ()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
    213.    // Вставить строку с конечным нулём формата ASCII текущего значения класса:
    214.       // VsStr() формирует строку различных систем счисления.
    215.       // Параметры:
    216.          // szByfer - Приёмный буфер для строки.
    217.          // dwForm  - Форма строки:
    218.             // Младший байт №1 - указывает размер групп через делитель байт №2.
    219.             // Например: значение 3 формирует число 1234567890 как
    220.                // число 1 234 567 890.
    221.             // Байт №2 - байт делитель групп. При 0 пробел.
    222.             // Байт №3 - размер нулевых заполнителей.
    223.             // Например: значение 10 формирует число 12345 как
    224.                // число 0 000 012 345, а число 5 как 0 000 000 005.
    225.          // lSisSch  - система счисления 2 значит двоичная, 8 - восьмеричная,
    226.             // 10 - десятеричная, 16 - шестнадцатиричная.
    227.       // Возврат: Удачно - длина строки в байтах без учёта конечного нуля.
    228.                // Провал - 0.
    229.       ONB32 __fastcall VsStr(iNB8 szByfer, NB32 dwForm, long lSisSch);
    230.       // VsStr10() формирует строку десятеричной системы счисления.
    231.       // Макро определения:
    232. #define  ODKNB64_STR10_BYFER   44  // Необходимый размер буфера.
    233.       // Параметры: szByfer - Приёмный буфер для строки. Размер не менее 44 байта.
    234.                  // dwForm  - Форма строки: Те же что и у VsStr().
    235.       ONB32 VsStr10(iNB8 szByfer, NB32 dwForm=3)
    236.                                             {return VsStr(szByfer, dwForm, 10);}
    237. // VsStr2() формирует строку двоичной системы счисления.
    238.       // Макро определения:
    239. #define  ODKNB64_STR2_BYFER   132 // Необходимый размер буфера.
    240.       // Параметры: szByfer - Приёмный буфер для строки. Размер не менее 132 байта.
    241.                  // dwForm  - Форма строки: Те же что и у VsStr().
    242.       ONB32 VsStr2(iNB8 szByfer, NB32 dwForm=4)
    243.                                              {return VsStr(szByfer, dwForm, 2);}
    244.       // VsStr8() формирует строку восьмеричной системы счисления.
    245.       // Макро определения:
    246. #define  ODKNB64_STR8_BYFER   48  // Необходимый размер буфера.
    247.       // Параметры: szByfer - Приёмный буфер для строки. Размер не менее 48 байт.
    248.                  // dwForm  - Форма строки: Те же что и у VsStr().
    249.       ONB32 VsStr8(iNB8 szByfer, NB32 dwForm=3)
    250.                                              {return VsStr(szByfer, dwForm, 8);}
    251.       // VsStr16() формирует строку шестнадцатиричной системы счисления.
    252.       // Макро определения:
    253. #define  ODKNB64_STR16_BYFER   36 // Необходимый размер буфера.
    254.       // Параметры: szByfer - Приёмный буфер для строки. Размер не менее 36 байт.
    255.                  // dwForm  - Форма строки: Те же что и у VsStr().
    256.                  // Байт №4 - добавление к базовым буквам "ABCDEF".
    257.                        // Например: значение 32 формирует буквы "ABCDEF" как
    258.                        // буквы "abcdef".
    259.       ONB32 VsStr16(iNB8 szByfer, NB32 dwForm=2)
    260.                                             {return VsStr(szByfer, dwForm, 16);}
    261.    // Взять строку с конечным нулём формата ASCII для установки значения класса:
    262.       // VzStr() формирует значение из строки различных систем счисления.
    263.       // Параметры: szStr - Строка с конечным dwForm байт №3.
    264.                     // Формат строки десятеричной системы счисления: 98...210.
    265.                        // Количество значащих цифр не более 20.
    266.                     // Формат строки шестнадцатиричной системы счисления: 0xFE...210.
    267.                        // Количество значащих цифр не более 16.
    268.                     // Формат строки восьмеричной системы счисления: 0o76...210.
    269.                        // Количество значащих цифр не более 22.
    270.                     // Формат строки двоичной системы счисления: 0b10.
    271.                        // Количество значащих цифр не более 64.
    272.                  // dwForm  - Форма строки:
    273.                     // Младший байт №1 - указывает размер строки, может быть 0.
    274.                     // Байт №2 - байт делитель групп. При 0 пробел.
    275.                     // Байт №3 - байт окончания строки.
    276.       // Возврат: Удачно - 1.
    277.                // Провал - 0.
    278.       ONB32 __fastcall VzStr(kiNB8 szStr, NB32 dwForm=0);
    279. };
    280.  




    volodya

    Ладно, Володя, объясняю внятно: мне нужен класс для управления файлами больших размеров, как например класс по управлению файлами от Borland TFile, только этот класс не работает с большими числами.

    Если кто знает где есть похожий класс, только для больших 64-х битных аргументов, сообщите пожалуйста.

    Привожу спецификацию TFile, нужен похожий:

    Syntax



    class TFile



    Header File



    file.h



    Description



    The TFile class encapsulates standard file characteristics and operations.



    Constructors



    TFile::TFile



    Public Data Members



    FileNull

    File Flags



    Member Functions



    Close

    Flush

    GetHandle

    GetStatus

    IsOpen

    Length

    LockRange

    Open

    Position

    Read

    Remove

    Rename

    Seek

    SeekToBegin

    SeekToEnd

    SetStatus

    UnlockRange

    Write



    rgo

    "typedef long long int int64;"

    Даже если такой абсурд и сработает в каком-то компиляторе :), то кто всю логику сделает.



    P.S. Для ВСЕХ.

    Ребята, я всех уважаю и понимаю что каждый находится на своём уровне познания, и по этому прошу не показывать своё невежество.

    Все мы (программисты) делаем одно большое дело - Пытаемся упорядочить наш мир познаного. По этому давайте относиться с уважением к любому уровню знаний (не уму, прошу не путать).

    Всем удачи. А класс для файлов нужен.
     
  16. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
  17. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    >> "typedef long long int int64;"

    > Даже если такой абсурд и сработает в каком-то

    > компиляторе :), то кто всю логику сделает.

    Если это абсурд, то возьми какой-нить школьный курс по С и Win32 програмированию!



    Объясняю популярно, то есть для твоего "уровня познания":

    gcc/g++: имеет свой родной 64 bit тип "long long"

    VC6/VC7: предоставляют подобный тип под именем "__int64"



    И оба компилятора генерируют весь код, необходимый для того что бы эти типы вели себя так же как и остальные встроенные типы. Замечу, что в зависимости от taget CPU, компиллеры будут герерировать разный код - то есть на для Pentium кода будет больше, и он будет медленнее чем для P4. Но с точки зрения програмиста, всего этого не видно.



    Ну теперь тебе понятно?



    Вот что я использую в VC7.1:

    typedef unsigned __int64 uint64;

    typedef unsigned long uint32;

    typedef unsigned short uint16;
     
  18. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Теперь по поводу files: RTFM!!!!



    From MSDN:

    SetFilePointer() - moves the file pointer of an open file.



    DWORD SetFilePointer(

    HANDLE hFile,

    LONG lDistanceToMove,

    PLONG lpDistanceToMoveHigh,

    DWORD dwMoveMethod

    );



    hFile

    [in] Handle to the file whose file pointer is to be moved. The file handle must have been created with the GENERIC_READ or GENERIC_WRITE access right. For more information, see File Security and Access Rights.



    lDistanceToMove

    [in] Low-order 32 bits of a signed value that specifies the number of bytes to move the file pointer. If lpDistanceToMoveHigh is not NULL, lpDistanceToMoveHigh and lDistanceToMove form a single 64-bit signed value that specifies the distance to move. If lpDistanceToMoveHigh is NULL, lDistanceToMove is a 32-bit signed value. A positive value for lDistanceToMove moves the file pointer forward in the file, and a negative value moves the file pointer backward.



    lpDistanceToMoveHigh

    [in] Pointer to the high-order 32 bits of the signed 64-bit distance to move. If you do not need the high-order 32 bits, this pointer must be set to NULL. When non-NULL, this parameter also receives the high-order DWORD of the new value of the file pointer. For more information, see the Remarks section later in this topic.



    dwMoveMethod

    [in] Starting point for the file pointer move. This parameter can be one of the following values.



    Example

    // Try to move hFile's file pointer some huge distance.

    dwPtrLow = SetFilePointer (hFile, lDistLow, & lDistHigh, FILE_BEGIN) ;



    P.S. также можно вызвать SetFilePointerEx() которая берёт __int64/LARGE_INTEGER.



    P.P.S. то есть, пишешь минимальный TCoolFile class с обычными Open(), Close(), Read(), Write() и двумя Seek():

    bool Seek(origin, uint32 distance);

    bool Seek64(origin, uint64 distance);
     
  19. OtD

    OtD Member

    Публикаций:
    0
    Регистрация:
    19 мар 2005
    Сообщения:
    31
    Адрес:
    Алма-Ата, Kazakhstan
    Для volodya:

    Спасибо, но не то.

    Нужен класс С++, а там Паскаль.

    Асинхронности нет и другие свойства Windows проигнорированы.

    Вопрос остаётся в силе. Всем заранее спасибо.
     
  20. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Смысла я особого в этом классе как не видел, так и не вижу :)

    Все это, разумеется, достигается использованием WinAPI + LARGE_INTEGER/__int64 - и никто не умирает. А тут - класс писать, причем с детской функциональностью, насколько я понял из твоего предложения выше :-/ Ладно люди, пишите класс, я выбыл.
     
Статус темы:
Закрыта.