argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: Отново за файловете в С++  (Прочетена 1750 пъти)

my_form

  • Неактивен Неактивен
  • Публикации: 45
Отново за файловете в С++
« -: 21.03.2008, 10:24:17 »

В езика Паскал файловете биват текстови, типизирани и нетипизирани. Какъв е аналога на типизираните файлове във С++. Имам предвид файл, елементите на който са от базов тип "struct". Къде мога да прочета повече по темата, за предпочитане на български език.
Активен

Ники Вълчанов

  • Неактивен Неактивен
  • Публикации: 526
  • History is written by the victors
Re: Отново за файловете в С++
« Отговор #1 -: 21.03.2008, 13:49:19 »

В езика Паскал файловете биват текстови, типизирани и нетипизирани. Какъв е аналога на типизираните файлове във С++. Имам предвид файл, елементите на който са от базов тип "struct". Къде мога да прочета повече по темата, за предпочитане на български език.

Не съм много вещ в C++ ... но принципно ... като искаш да запишеш някакъв обект във фаил и след това да го прочетеш отново и да си го качиш в паметта съм го правил така:

Правиш си някакъв клас MRING примерно с 2 int-a примерно и един char[20] (задължително всичко ти е статично щото съм тъп и не знам дали има и как се ползват класовете за сериализация в C++). След това отваряш един файл binary mode да си пишеш вътре. Итерираш през масива с твоите MRING обекти и всеки един го изсипваш във биранния фаил (ofstream.write мисля че беше метода приема указател и колко памет да метне във файла). После на същия принцип със ifstream четеш обратно ;) ...

СИГУРЕН СЪМ ЧЕ ИМА И ПО-ИНТЕЛИГЕНТЕН НАЧИН!!!
Нека колегите ти разкажат за него ;)

Да живей C++ и нека source-a бъде с теб ;)

P.S. ICQто можеш да ми го земеш от профила във форума (мога да ти пратя един стар проект, в който така чета и пиша обекти)
Активен
"Now everything is reflection
as I make my way though this labyrinth.
And my sence of direction
is lost like the sound of my steps!!!"
                                                     Elisa - Labyrinth

unauthorized

  • Неактивен Неактивен
  • Публикации: 1
Re: Отново за файловете в С++
« Отговор #2 -: 27.03.2008, 15:38:07 »

Хич не ти препоръчвам да правиш така ако не си доста на вътре в C++. Иначе най простия метод е да заредиш целия файл в паметта и чист memcpy() в структурата ти. Може да се наложи reinterpret_cast да направиш но става. Ако настояваш да четеш по този начин, винаги гледай да сравняваш големината на данните ти с големината на това което копираш в структурата ( sizeof() ). Иначе ще си уязвим за buffer overflow. Ето ти малко инфо за това как става. На английски е но примерите би трябвало да ти стигат :

http://cplusplus.com/reference/iostream/istream/read.html
http://www.cplusplus.com/reference/clibrary/cstring/memcpy.html
http://www.cppreference.com/keywords/sizeof.html

Колкото за извеждането във файл, ofstream::wrtite наистина ще стане но най-хубаво е да си го изведеш във хубав и лесен за четене формат, та да знаеш че разни странни данни няма да ти развалят програмата. Ако сигурноста не е от значение, това е напълно валиден метод.

http://cplusplus.com/reference/iostream/ostream/write.html
Активен

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: Отново за файловете в С++
« Отговор #3 -: 28.03.2008, 10:08:45 »

сериализация в този умрял забравен от бога език няма ли ?
Активен

Ники Вълчанов

  • Неактивен Неактивен
  • Публикации: 526
  • History is written by the victors
Re: Отново за файловете в С++
« Отговор #4 -: 28.03.2008, 12:08:10 »

сериализация в този умрял забравен от бога език няма ли ?
exaxaexaexaexaee

Ето ти 1ви hit в google
http://www.osix.net/modules/article/?id=348

Сигурно има някви яки библиотеки за сериализация ... ама принципно ... къф е проблема сам да си го сериализираш всичко. Зора са масивите (щото не знаеш колко са големи). По един метод за сериализация и десериализация и преди всеки масив слагаш по 16бита (един unsigned) да кажеш к'ъф размер е и толкоз. Те така или иначе нещата се качват в паметта по ред на декларациите в структурата / класа. Няма място за експлоити тука или нещо подобно. Просто четеш, валидираш т'ва дето си прочел всеки път, ако нещо не ти хареса по време на десериализацията зануляваш инстанцията или вадиш SerializationException примерно :)
Активен
"Now everything is reflection
as I make my way though this labyrinth.
And my sence of direction
is lost like the sound of my steps!!!"
                                                     Elisa - Labyrinth

Светослав Енков

  • Неактивен Неактивен
  • Публикации: 1864
    • Shark's Home Page
Re: Отново за файловете в С++
« Отговор #5 -: 28.03.2008, 12:53:42 »

Забравени от Бога няма... Понеже няма Бог! Никак другояче не си обяснявам безбожието напоследък!  :evil:
Активен

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: Отново за файловете в С++
« Отговор #6 -: 28.03.2008, 15:25:29 »

има бог гоогле и той както винаго доказа съществуването си знаеики отговор на всеки въпрос.
Въпчанов : а бе какви 15 16 20 320 бита .. .я пътя implements Serializable writeObject readObject ae.. глупости сам ще си го правиш като са го направили хората.
Активен

Ники Вълчанов

  • Неактивен Неактивен
  • Публикации: 526
  • History is written by the victors
Re: Отново за файловете в С++
« Отговор #7 -: 28.03.2008, 18:50:36 »

има бог гоогле и той както винаго доказа съществуването си знаеики отговор на всеки въпрос.
Въпчанов : а бе какви 15 16 20 320 бита .. .я пътя implements Serializable writeObject readObject ae.. глупости сам ще си го правиш като са го направили хората.

[Serializable]
class ЩеСериализираме
{
    //Пълнеж
}

говори ми след т'ва кой бил по-якия език :D
Активен
"Now everything is reflection
as I make my way though this labyrinth.
And my sence of direction
is lost like the sound of my steps!!!"
                                                     Elisa - Labyrinth

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: Отново за файловете в С++
« Отговор #8 -: 29.03.2008, 19:55:55 »

e ....
много добре знам как е в C# Вълчан то в всички езици е така :)
дали е
class X impements Serializable {
пълнеж
}
ии е с атрибут [] или с анотация както в Objective-C сe тая
Активен