Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как несколько разных фалов поместить в один. Создание ресурса. 
:(
    Опции темы
Separator
Дата 9.6.2008, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как несколько разных файлов (напр., картинка, музыка, текстовый файл) поместить в один, т. е. создать что-то вроде файла ресурсов, и потом прочитать эти файлы из него.
PM MAIL   Вверх
andrew_121
Дата 9.6.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Легко. Но это будет нестандартный файл ресурсов.

Код


#include <stdio.h>

int main( int argc, char** argv ) {

    int idx;
    char* flist[] = {"file1.txt", "file2.txt", "file3.txt"};
    // Приведенная ниже строка - идея jonie.
    int cnt = sizeof(flist)/sizeof(flist[0]);
    
    FILE* out = fopen( "out.bin", "wb" );
    fwrite(&cnt, 1, sizeof(cnt), out ); // Кол-во файлов.
    
    for ( idx = 0; idx < cnt; idx++ ) {
        FILE* in = fopen( flist[idx], "rb" );
        if ( !in ) {
            printf( "Cannot open source file!\n" );
            fclose( out );
            return -1;
        }
        /* Полчаем размер файла. */
        fseek(in, 0L, SEEK_END);
        int fs = ftell(in);
        fseek(in, 0L, SEEK_SET);
        /**/
        fwrite(&fs, 1, sizeof(fs), out ); // Размер файла.
        /* Выделяем память для файла. */
        char* array = (char*)malloc(fs+1);
        if ( !array ) {
            printf( "Cannot allocate memory!\n" );
            fclose(in);
            fclose(out);
            return -1;
        }
        /* Читаю исходный файл */
        fread(array, 1, fs, in);
        fclose(in);
        
        fwrite( array, 1, fs, out );
        /* Освобождаю память. */
        free( array );
    }
    
    fclose(out);
    
    return 0;
}


Работает. Сам проверил. Компилил в Mingw32.

Можешь добавить еще одно поле - тип файла(txt, exe, jpg, dll, и т.д.)
Код

typedef enum _ftype {TXT_FILE, EXE_FILE, JPG_FILE, DLL_FILE} ftype;


Это сообщение отредактировал(а) andrew_121 - 11.6.2008, 13:57


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
jonie
Дата 9.6.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 118



есть еще IStorage (гугл найдет)... возможно стоит поиграться с ним.



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
andrew_121
Дата 9.6.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



jonie: Стараюсь избегать зависимости.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
jonie
Дата 9.6.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 118



andrew_121 стараюсь не делать велосипеды


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Rififi
Дата 9.6.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



избегать зависимостей от winapi в разделе по winapi? жОстко...

PM MAIL   Вверх
andrew_121
Дата 10.6.2008, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



jonie:
Велосипеды бывают, и хорошие, и плохие, как Linux и Windows.
Rififi:
Не от "winapi в разделе по winapi" а от WINAPI в разделе по программингу на С/С++. POSIX respect.
Windows must die, Linux forever!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
jonie
Дата 10.6.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 118



andrew_121 велосипеды бывают с квадратыми колесами и с круглыми. ваш - с квадратными (суть то мож и верная, но реализация квадратная).
я промолчу про 4 гига ограничений, про нафига-то пихание всего файла в буфер и его динамическое "выделение-освобожлдение", про забывание проверять на ошибки, но это : char* array = (char*)malloc(fs+1);  выглядит как непонимание того что вы пишете.
и, кстати, это :
Код

const int cnt = 3;
лучше заменить на sizeof(x)/sizeof(x[0]) конструкцию, но это все мелочи...

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


и вообще странно слышать от человека что использует mingw32 слова что линукс рулез... складывается мнение, что вы много что слышали про *n?x, но в реальности далее чем сборка ядра не продвигались...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
andrew_121
Дата 10.6.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



jonie - Вы что прикалываетесь ?!
Цитата

я промолчу про 4 гига ограничений

И ежу понятно, что это ненормально!!! Я код за пару минут набросал, для информативности. Кому надо - подумают над тем, как код улучшить. Я даже коментарии вставил!
Или мне нужно было Separator и проектик в Студии собрать, и на мыло кинуть, и сказать ПОЗЖАЛУЙСТА ?!!!
Цитата

и вообще странно слышать от человека что использует mingw32 слова что линукс рулез

А Вы каким образом, проект написаный на Qt собирете в Винде?
Посоветуете Студию ставить ?!

Действительно странные у Вас критерии оценки!
Вы походу пишите для Виндавз?!

Это сообщение отредактировал(а) andrew_121 - 10.6.2008, 22:15


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Rififi
Дата 10.6.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(andrew_121 @  10.6.2008,  01:47 Найти цитируемый пост)
Не от "winapi в разделе по winapi" а от WINAPI в разделе по программингу на С/С++. POSIX respect.

раздел, если что, называется "C/C++: Системное программирование и WinAPI"

Цитата(andrew_121 @  10.6.2008,  01:47 Найти цитируемый пост)
Windows must die, Linux forever! 

что это было, я вообще не понял. или этот лозунг не для меня?

ps. я тоже за IStorage. Этот механизм можно считать приближенным аналогом бинарной сериализации в .NET

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


Эксперт
****


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

Репутация: 7
Всего: 118



andrew_121 вы будете удивлины, но у меня qt4 вполне себе нормально работает в MSVC и даже редактор в студии встроеный... аналогично работает и на связке компилер+SDK+qt вроде (ну в общем давно работало точно такая связка).

и при чем там qt вообще или студия? давайте меряться органами у кого чего стоит?) у меня вот на виртуалке живет гента...я уж не говорю про то что у меня просто стоять еще может 8)

Цитата

Вы походу пишите для Виндавз?!
опять же удивитесь: я пишу для виндовс. и?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
andrew_121
Дата 10.6.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(jonie @ 10.6.2008,  22:18)
andrew_121 вы будете удивлины, но у меня qt4 вполне себе нормально работает в MSVC и даже редактор в студии встроеный... аналогично работает и на связке компилер+SDK+qt вроде (ну в общем давно работало точно такая связка).

и при чем там qt вообще или студия? давайте меряться органами у кого чего стоит?) у меня вот на виртуалке живет гента...я уж не говорю про то что у меня просто стоять еще может 8)

Цитата

Вы походу пишите для Виндавз?!
опять же удивитесь: я пишу для виндовс. и?


Да, я одним удивлен - в Виндавз что-то работает!  smile 

Я пишу для Linux, и для того чтоб какой-то код скомпилить в Виндавз, я не буду ставить Студию.
Cygwin или Mingw.

А если быть до конца честным, я WINAPI настолько плохо знаю, что Вы бы удивились.
Например:
http://forum.vingrad.ru/forum/topic-215868...tlasterror.html
http://forum.vingrad.ru/forum/topic-215651.html

Вывод:
Сам код - информативен, рабочий. Нет привязки к платформе.
Что еще нужно ???

Это сообщение отредактировал(а) andrew_121 - 11.6.2008, 13:59


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
jonie
Дата 10.6.2008, 22:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 118



нужно меньше нервничать, и выкрикивать везде holywar-ные лозунги.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
andrew_121
Дата 10.6.2008, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(jonie @ 10.6.2008,  22:59)
нужно меньше нервничать, и выкрикивать везде holywar-ные лозунги.

Так значит проблема не в коде ? smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 11.6.2008, 14:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(andrew_121 @  9.6.2008,  19:48 Найти цитируемый пост)
jonie: Стараюсь избегать зависимости. 

а разве
Цитата(andrew_121 @  10.6.2008,  22:06 Найти цитируемый пост)
Qt

не зависимость? smile 

вообще, в Qt должен быть аналог IStorage.. если нет, то там есть потоки(файловые) в которые можно сериализовать объекты разных типов...


Цитата(andrew_121 @  10.6.2008,  22:26 Найти цитируемый пост)
Да, я одним удивлен - в Виндавз что-то работает!

если у тебя под "Виндовс" что-то не работает, то это не значит что оно не работает ни у кого smile 
PM MAIL Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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