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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как открыть файл(RAR), Для последующего кодирования в Base64 
:(
    Опции темы
CDell
Дата 29.10.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот всё письмо отправляю smile 
С письмом нужно отправить RAR архив.
Как открыть этот RAR архив и запихнуть в строчку, для того чтобы кодировать её в Base64?
PM MAIL   Вверх
JackYF
Дата 29.10.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(CDell @  29.10.2007,  18:30 Найти цитируемый пост)
Как открыть этот RAR архив и запихнуть в строчку

ну как:

fopen, последовательно читаем в буфер, енкодим, записываем в выходной буфер, оттуда в файл.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
CDell
Дата 29.10.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть файл text.rar = 72 байт
    
Читаю его:

Код

    FILE * pFile = fopen("text.rar", "r"); 
    char buff[1024]; 
    while(fgets(buff, 1023, pFile) != NULL) 
    { 
    } 
    fclose(pFile); 


В buff на появляется сообщение Rar!
PM MAIL   Вверх
JackYF
Дата 29.10.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(CDell @  29.10.2007,  20:45 Найти цитируемый пост)
fgets

fread


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
jonie
Дата 29.10.2007, 21:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ябы даже больше сказал
Код

fopen("file.ext", "rb");


и вообще чтение всего файла не требуется : base64 блочный алгоритм....


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


Шустрый
*


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

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



Чёт всёравно не получаеться smile 

Код

FILE *f = fopen("text.rar", "rb");
char *text = new char[400];
fread(text, 100, 1, f);
fclose(f);


На выводе опять ошибку выдаёт что рар архив.

Цитата

и вообще чтение всего файла не требуется : base64 блочный алгоритм.... 

А можно поподробней? Был бы очень рад если бы привёл примерчик. smile 



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


Эксперт
****


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

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



хм... ну давай те поожем )
Код

namespace base64
{
  const char to_table[64] = 
  {
    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
    'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
    'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
    'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
    'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
    'w', 'x', 'y', 'z', '0', '1', '2', '3',
    '4', '5', '6', '7', '8', '9', '+', '/'
  };

  const char from_table[128] =
  {
    -1, -1, -1, -1, -1, -1, -1, -1, // 0
    -1, -1, -1, -1, -1, -1, -1, -1, // 8
    -1, -1, -1, -1, -1, -1, -1, -1, // 16
    -1, -1, -1, -1, -1, -1, -1, -1, // 24
    -1, -1, -1, -1, -1, -1, -1, -1, // 32
    -1, -1, -1, 62, -1, -1, -1, 63, // 40
    52, 53, 54, 55, 56, 57, 58, 59, // 48
    60, 61, -1, -1, -1,  0, -1, -1, // 56
    -1,  0,  1,  2,  3,  4,  5,  6, // 64
     7,  8,  9, 10, 11, 12, 13, 14, // 72
    15, 16, 17, 18, 19, 20, 21, 22, // 80
    23, 24, 25, -1, -1, -1, -1, -1, // 88
    -1, 26, 27, 28, 29, 30, 31, 32, // 96
    33, 34, 35, 36, 37, 38, 39, 40, // 104
    41, 42, 43, 44, 45, 46, 47, 48, // 112
    49, 50, 51, -1, -1, -1, -1, -1  // 120
  };

  typedef unsigned char BYTE;
  typedef unsigned short WORD;
  typedef unsigned int  DWORD;
 
  template <class InputIterator, class OutputIterator>
  void encode(const InputIterator& begin, 
              const InputIterator& end, 
              OutputIterator out)
  {
        InputIterator it = begin;
        int lineSize = 0;    //длинна строки
        int n_bytes;        //кол-во байт взятых
        DWORD dwInput;        //для сохранения 3-х байт
        do{
            dwInput = 0;
            //берем три байта
            for(n_bytes = 0; (n_bytes<3)&&(it != end) ; ++n_bytes,++it){
                dwInput <<= 8;
                dwInput += static_cast<BYTE>(*it);
            }

            //кодируем в BASE64
            int n_bits = n_bytes*8;
            while (n_bits > 0){
                n_bits-=6;
                BYTE index = ((n_bits < 0) ? dwInput << -n_bits : dwInput >> n_bits) & 0x3F;
                *out =  to_table[index];
                ++out;
                ++lineSize;
            }
            
            //строка больше или равна 76 симаолам?
            if(lineSize >= 76){
                //*out = 0x0D;
                ++out;
                *out = 0x0A;
                ++out;
                lineSize = 0;
            }

        }while(n_bytes==3);

        //установим последнюю строку, если надо
        if(n_bytes){
            while(n_bytes++<3){
                *out = '=';
                ++out;
            }
        }
  }
}    //end base64 namespace

и используемс это ...
Код

ifstream in("base64.bin",ios::binary);
noskipws(in);
string base64;

base64::encode( istream_iterator<unsigned char>(in),
        istream_iterator<unsigned char>(), 
        back_inserter(base64));

in.close();


Это сообщение отредактировал(а) jonie - 3.11.2007, 08:58


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


Шустрый
*


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

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



Спасибо.
Но из-за своих кривых рук немогу собрать это.

Вот что получилось:
Код

#include <iostream>
#include <fstream>
#include <iterator>

//Здесь твой первый кусок кода

int main()
{
    using namespace std;

    ifstream in("base64.bin",ios::binary);
    noskipws(in);
    string base64;

    base64::encode(istream_iterator<unsigned char>(in),
                   istream_iterator<unsigned char>(), 
                   back_inserter(base64));

    in.close();

return 0;
}

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


Эксперт
****


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

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



как минимум #include <string> пропущен.


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


Эксперт
****


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

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



Цитата

В buff на появляется сообщение Rar!

Цитата(CDell @ 2.11.2007,  19:32)
Чёт всёравно не получаеться smile 

Код

FILE *f = fopen("text.rar", "rb");
char *text = new char[400];
fread(text, 100, 1, f);
fclose(f);


На выводе опять ошибку выдаёт что рар архив.

Цитата

и вообще чтение всего файла не требуется : base64 блочный алгоритм.... 

А можно поподробней? Был бы очень рад если бы привёл примерчик. smile

Rar! - это не ошибка, это первые 4 символа в любом RAR архиве.

Это сообщение отредактировал(а) xvr - 4.11.2007, 10:07
PM MAIL   Вверх
CDell
Дата 4.11.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

как минимум #include <string> пропущен. 

Всёравно ошика вылетает на то что в этом файле #include <iterator>
PM MAIL   Вверх
JackYF
Дата 4.11.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



CDell, какой компилятор/среда программирования?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
CDell
Дата 4.11.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

CDell, какой компилятор/среда программирования? 

Microsoft Visual C++ 6.0

Ошибка вот:
Код

c:\program files\microsoft visual studio\vc98\include\iterator(82) : error C2039: 'push_back' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
        c:\program files\microsoft visual studio\vc98\include\iterator(82) : while compiling class-template member function 'class std::back_insert_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &_
_thiscall std::back_insert_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::operator =(const char &)'
Error executing cl.exe.


Это если подключаем #include <iterator>, а если без него
Код

c:\cpp\zen\zen.cpp(104) : error C2065: 'istream_iterator' : undeclared identifier
c:\cpp\zen\zen.cpp(104) : error C2062: type 'unsigned char' unexpected
Error executing cl.exe.

PM MAIL   Вверх
JackYF
Дата 5.11.2007, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Ага... пробуй

вместо
Цитата(CDell @  3.11.2007,  12:17 Найти цитируемый пост)
string base64;

Код

basic_string<unsigned char> base64;


#include <iterator> надо.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
CDell
Дата 5.11.2007, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всёравно ошибка таже.
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.1511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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