Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами, Просьба посмотреть ход моих мыслей 
:(
    Опции темы
EvilsInterrupt
Дата 2.12.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



Всем привет!

Проектирую библиотеку по работе с файлами и потому интересно какие собственно известны способы работы с файлами ? Пока знаю работа с потоками iostream и работа на уровне ф-ций fseek, fread, fwrite из stdio.h. Также полагаю что есть что-то в бусте.

Вопрос №1: Какие вы знаете способы работы с файлами ?


Опишу свою ситуацию на чем заморачиваюсь. Ввиду того что пишу библиотеку по работе с исполнимыми файлами и пишу ее с учетом портабельности, то вынужден задать единную систему типов. Пока остановился на stdint.h и ее uint32_t, int64_t, etc , но на будущее напишу свою библиотеку типов, которая будет учитывать еще и порядок байта, типа LE, BE.
Помимо типов еще нужно учитывать, что средства разработки программ под разные платформы(читай компиллеры и ОС) имеют разные ф-ции по доступу и работе с файлами и поэтому написал библиотеку ф-ций врапперов wrappers_io.h и задал ее в типах stdint.h , написал первую частную реализцию wrappers_io_win32.cpp , а теперь хочу применить эти враппере в более высокой по абстракции библиотеке!

Вопрос №2:
Типы по сути-то нужны, для того чтобы корректно читать файловые концепции, к примеру какой-нить заголовок. Но в каких типах задавать ф-ции врапперы(возвращаемые типы, аргументы ф-ции)? Может имеет смысл их уже задавать через обычные С++ - типы, не повредит ли это портабельности ?

Подумал и выяснил, что работа будет вестись не только с файлами, но и с памятью, то возможно мне будет удобней задать всю работу через так называемы потоки! А уж они будут подразделяться на работающие с файлами и с памятью, в будущем возможно задам и работающие с сетью(для того чтобы несколько реверсеров могли трудиться надо одним файлом совместно). Поэтому возникает следующая иерархия: 

class I_Stream;
class C_FileStream : public I_Stream;
class C_MemoryStream : public I_Stream;

Сразу же напрашивается, что буду читать, писать, ставить указатель, то первые вирт. ф-ции это:
Read, Write, Seek.

Вопрос №3:
Может имеет смысл разделить на I_StreamInput и I_OutputStream , или же лучше все-таки держать в одном классе, а в будущем перегрузить операторы << , >> для удобства работы ?

ЗЫ:
Прошу подмогнуть, а то извилины мозга уже настолько завязаны, что думать эффективно уже не получается. Может кто-то имел опыт, буду рад если поделитесь мыслями, можно в личку или по аське! ;) Надеюсь что появятся опытные люди, т.к. нацелен на выявление малвары, т.е. благие намерения! ;)
PM MAIL WWW ICQ Jabber   Вверх
djamshud
Дата 2.12.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



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

http://forum.vingrad.ru/index.php?showtopi...t&p=2033290


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
EvilsInterrupt
Дата 2.12.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



Спасибо, буду вникать! ;) Но также буду рад мыслям и других форумчан, почему-то верю, что тут есть еще опытные люди! ;)
PM MAIL WWW ICQ Jabber   Вверх
unicuum
  Дата 2.12.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(EvilsInterrupt @  2.12.2009,  13:45 Найти цитируемый пост)
Также полагаю что есть что-то в бусте.

boost filesystem


--------------------
user posted image
обычный день на винграде
PM   Вверх
Abyx
Дата 2.12.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



unicuum, boost.filesystem работает с путями к файлам, а не с файлами
PM MAIL   Вверх
unicuum
  Дата 3.12.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Abyx @  2.12.2009,  18:29 Найти цитируемый пост)
unicuum, boost.filesystem работает с путями к файлам, а не с файлами 

С файлами работает STL, что ещё надо?


--------------------
user posted image
обычный день на винграде
PM   Вверх
xvr
Дата 4.12.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Чем не устроили банальные iostream?

PM MAIL   Вверх
EvilsInterrupt
Дата 1.4.2010, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



Отпишусь по состоянию дел на данный момент ;) В виду того, что эта библиотека не моя работа, а мое хобби возвращаюсь к ней не так часто.

Выбрал путь разработки стримов, как вывод есть два пути:

Путь №1 (частичное ООП):

1)
Разрабатывается libio со след. иерархией интерфейсов:

class i_stream_base;
class i_file_stream : public i_stream_base;
class i_memory_stream : public i_stream_base;

2)
далее разрабатываются конкретные классы-реализаторы:

class c_file_stream_win32 : public c_file_stream;
class c_file_stream_linux : public c_file_stream;
class c_file_stream_maxos : public c_file_stream;
etc.
аналогично и для c_memory_stream


Путь №2 (не полный ООП):

1)
разрабатывается библиотека врапперов вокруг нативных АПИ-функций для ОС, к примеру во круг CloseHandle() враппер closefile(). Есно дело несколько реализаций одного и того же протипа враппера, потому что различные ОС!!!

2)
разрабатывается интерфейся, аналогичные п.1 в Пути №1

3)
Реализовываются классы c_file_stream, c_memory_stream используя ф-ции врапперы!


В чем прелесть первого пути ? - в том что это более логично для ООП.
В чем прелесть второго ? - в том что врапперы проще отлаживать и не так часто, плюс классы реализаторы c_file_stream , c_memory_stream не так часто придется править

Я пошел путем №2 мне он ближе и удобней. Вообще, если кто-нибудь уже реализовывал подобное буду рад услышать его опыт!

PM MAIL WWW ICQ Jabber   Вверх
xvr
Дата 2.4.2010, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Все предложенные пути ПОЛНОСТЬЮ покрываются стандартными стримами С++ (std::iostream) причем гораздо лучше. В чем цимус изобретения еще одного велосипеда с квадратными колесами?  smile 

PM MAIL   Вверх
EvilsInterrupt
Дата 2.4.2010, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



xvr, 
Если чел заморочился, значит так надо! Не зачем выяснять обходные пути, надо или помочь если умеешь или пройти мимо!
У меня этот проект расчитан не только на обычные компы, но и на железки. А там при малейшем изменении crt, т.е. стандартных вещей сразу же придется чуть ли не все ядро перекомпиливать. Нахера мне это надо ? Уж проще прогружать своего рода плагины, чем ядро! Ядро, отладить и сделать "стабл".
Его же использовать и для обычных стационарных компов, чтобы в случае обнаружении баги, можно было включить  очередной фикс в очередное перепрошивание ;)
PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 2.4.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(EvilsInterrupt @  2.4.2010,  19:39 Найти цитируемый пост)
надо или помочь если умеешь или пройти мимо!

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

Цитата(EvilsInterrupt @  2.4.2010,  19:39 Найти цитируемый пост)
Не зачем выяснять обходные пути, 

Ну это хорошо, что Вы сразу раставили, что грозит человеку, когда он пытается вернуть вас с обходных путей, на ровную дорогу..

Цитата(EvilsInterrupt @  2.4.2010,  19:39 Найти цитируемый пост)
. А там при малейшем изменении crt, т.е. стандартных вещей сразу же придется чуть ли не все ядро перекомпиливать

Не вижу логики в том, чтоб отказываться от стл. Нужно стабильное ядро - делайте, но зачем изобретать велосипеды ?!

хотя нет, не обращайте внимание на сказанное .. я лучше пройду мимо..


Это сообщение отредактировал(а) mes - 3.4.2010, 00:31


--------------------
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 2.4.2010, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



>>не кажется Вам что это звучит грубовато, по отношению к человеку, который от всей души хотел Вам помочь ?
согласен, грубовато! Но честно говоря устал пояснять каждому свою ситуацию и пришел к выводу, что ООП все-таки классная штука и если ты клиентский код, то тебе нафиг не надо знать как устроено и что там, главно что есть! )))
Так и в задаче, если есть дано, то не надо искать обходное!

Ведь по сути, когда мы выполняем задачи заказчика, то мы делаем то что нам заказали, а не чтото другое!

Думаю вполне обосновано раздражение спрашивающему про одно, а ему про другое! Ведь в исходном сообщении, строго задано направление "прошу помочь разработать", а не "найти альтернативу" ;)

хотя да, xvr , если вы излишне приняли близко к сердцу, то искренне прошу прощение. Просто устал пояснять, каждому о своей ситуации и заложился на факт с мат.подходом "есть дано, значить будем от этого и исходить"
PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 3.4.2010, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(EvilsInterrupt @  2.4.2010,  21:09 Найти цитируемый пост)
и пришел к выводу, что ООП все-таки классная штука и если ты клиентский код,

Поработаете с ним больше и иллюзия сойдет.. Да ООП хорошо, да лучше чем простое процедурное проектирование, но одного ООП мало, чтоб нормально решить задачу.

Цитата(EvilsInterrupt @  2.4.2010,  21:09 Найти цитируемый пост)
Так и в задаче, если есть дано, то не надо искать обходное!

Не пойму как  это связано с ООП, но ладно.. давйте посмотрим что дано :

прежде всего название
Цитата

 Работа с файлами, Просьба посмотреть ход моих мыслей

имхо данная фраза говорит, о том, что ход мысли может быть и не верен, что, возможно, и предположил xvr.

Далее, не хочу приводить кучу цитат,  вы спрашиваете о способе,который покрывает Ваши потребности.. Нигде не указано ограничений, ни то что у Вас жесткая линия от которой Вы не собираетесь уступать.. 

Может я чего и не увидел, тогда не могли бы Вы показать, какое из Ваших высказываний делает цитату 
Цитата(xvr @  2.4.2010,  05:44 Найти цитируемый пост)
Все предложенные пути ПОЛНОСТЬЮ покрываются стандартными стримами С++ (std::iostream) причем гораздо лучше.

,так сказать, неадекватной применительно к Вашей теме ?




--------------------
PM MAIL WWW   Вверх
xvr
Дата 3.4.2010, 09:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(EvilsInterrupt @ 2.4.2010,  20:39)
xvr, 
Если чел заморочился, 

Это я вижу
Цитата

значит так надо! 
А вот этого я не вижу.
Цитата

Не зачем выяснять обходные пути, 
iostream - это не 'обходной путь'. Он ПОЛНОСТЬЮ соотвествует вашим требованием из первого поста
Цитата

надо или помочь если умеешь или пройти мимо!
Пытаюсь помочь - посмотрите хотя бы документацию на iostream  smile 
Цитата

У меня этот проект расчитан не только на обычные компы, но и на железки. А там при малейшем изменении crt, т.е. стандартных вещей сразу же придется чуть ли не все ядро перекомпиливать. 
Какое ядро? Вы о чем?! iostream часть стандартной библиотеки С++, к ядру отношения не имеет.
Цитата

Нахера мне это надо ? 
Видимо тяга к изобретательству  smile 
Цитата

Уж проще прогружать своего рода плагины, чем ядро! Ядро, отладить и сделать "стабл".
Вы хотите сказать, что самописная библиотека будет отлаженнее и стабильнее чем стандартная библиотека С++ ?  smile 
Цитата

Его же использовать и для обычных стационарных компов, чтобы в случае обнаружении баги, можно было включить  очередной фикс в очередное перепрошивание ;)
iostream  smile 

Не хотите брать ее целиком - хотя бы посмотрите на дезайн, он отличается от вашего, причем в лучшую сторону. Ваш дезайн мягко говоря кривоват  smile В вашем понимании ООП подхода классы будут плодится в геометрической прогрессии

Цитата

Но честно говоря устал пояснять каждому свою ситуацию и пришел к выводу, что ООП все-таки классная штука и если ты клиентский код, то тебе нафиг не надо знать как устроено и что там, главно что есть! )))
Открыли для себя ООП? Тогда понятно стремление что нибудь написать  smile Открою вам страшную тайну - iostream тоже ООП  smile А еще есть шаблоны .... 

 smile 
Был у меня давным давно один приятель (в году так 1989). Большой любитель узнавать что то новое. Я тогда как раз написал некую текстовую оконную систему (на самописных thread'ах под DOS). По идеологии построения она очень напоминала Windows (окна, события, очереди, потоки). Его так поразил этот дизайн, что он недели 2 писал всякие окошки, ходил восторгался и пр. Потом он открыл для себя Windows (тогда это была 3.1). Тут уж он восторгался и игрался не меньше месяца. Свою основную работу он на это время полностью забросил, в результате чего, когда пришли сроки, работа оказалась не выполненной. Все планы лаборатории, где он работал, оказались сорванными, а его самого чуть не уволили.
Мораль - восторгаться нужно осторожно  smile 


Цитата

Думаю вполне обосновано раздражение спрашивающему про одно, а ему про другое! 
Про тоже самое
Цитата

Ведь в исходном сообщении, строго задано направление "прошу помочь разработать", а не "найти альтернативу" ;)
Посмотрите дезайн iostream и скопируйте оттуда

Единственное, что в ваших требованиях стоит 'выше'  iostream, это работа с форматами файлов (endianess, структуры и пр). Вот это разрабатывать можно, но оно не имеет НИКАКОГО отношения к собственно доступу к файлу (iostream или аналог этот доступ замечательно обеспечат). Вот только я не увидел нигде даже намеков, как это может быть сделанно  smile 

 smile 
Приходит к иллюзионисту мужик, и говорит:
- Я вам придумал отличный фокус. Представьте себе - арена, оркестр играет марш. На арену выходят 10 униформистов в строгой черной униформе. Они делают круг и становятся вокруг арены. Сверху падает лестница. Тут, под барабанную дробь, на арену выходите вы, весь в белом, и начинаете медленно подниматься по лестнице в лучах софитов. И вдруг на середине подъема исчезаете. 
- Замечательно, и как же это сделать?
- А я откуда знаю, вы фокусник, вы и думайте!

Добавлено через 1 минуту и 56 секунд
Кстати, о птичках -
Цитата(EvilsInterrupt @  2.4.2010,  22:09 Найти цитируемый пост)
Но честно говоря устал пояснять каждому свою ситуацию
 Если вашу ситуацию приходится пояснять каждому есть повод задуматься, возможно в вашей ситуации что то неправильно  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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