Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2012, 03:12   #1
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию Чтение бинарных файлов.

Привет! Нужно прочитать бинарный файл. Читаю так:
Код:
// reading a complete binary file
#include <iostream>
#include <fstream>
using namespace std;

ifstream::pos_type size;
char * memblock;

int main () {
  ifstream file ("wiaacmgr.exe", ios::in|ios::binary|ios::ate);
  if (file.is_open())
  {
    size = file.tellg();
    memblock = new char [size];
    file.seekg (0, ios::beg);
    file.read (memblock, size);
    file.close();

    cout << "the complete file content is in memory\n";
    cout << memblock;
    delete[] memblock;
  }
  else cout << "Unable to open file";
  return 0;
}
Взято отсюда. Только экзешник свой подставил. Проблема в том, что при чтении любого файла в memblock будут содержаться одни и те же символы. Это я выяснил в режиме отладки. Все способы, найденные в гугле, тоже записывают эти несчастные символы в память. Но ведь не может у меня во всех .exe файлах лежать ровно одна и та же информация, тем более они все разного размера и совсем не по три байта.
Как нужно читать бинарные файлы, чтобы получать адекватные результаты?
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Старый 13.07.2012, 04:53   #2
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

дело в том что cout выводит строку до первого нуль-символа, а в .exe их много, нужно использовать другую операцию вывода или выводить посимвольно типа как
Код:
for(int i=0; i<size; i++) cout << memblock[i];

Последний раз редактировалось Mahin; 13.07.2012 в 05:36.
Mahin вне форума Ответить с цитированием
Старый 13.07.2012, 05:49   #3
ElectroMent
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 27
По умолчанию

ios::ate или
Код:
 
 file.seekg (0, ios::end);
 size = file.tellg();

Последний раз редактировалось ElectroMent; 13.07.2012 в 08:15.
ElectroMent вне форума Ответить с цитированием
Старый 13.07.2012, 05:57   #4
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

Цитата:
Сообщение от ElectroMent Посмотреть сообщение
Неверно размер файла пытаешься определить
не, так конечно тоже можно, но и вариант топикстартера работает
Mahin вне форума Ответить с цитированием
Старый 13.07.2012, 07:25   #5
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Mahin Посмотреть сообщение
дело в том что cout выводит строку до первого нуль-символа, а в .exe их много, нужно использовать другую операцию вывода или выводить посимвольно типа как
Код:
for(int i=0; i<size; i++) cout << memblock[i];
Огромное спасибо!
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание бинарных файлов pufystyj Общие вопросы C/C++ 2 11.02.2012 22:02
Редактирование бинарных файлов Sa1vatore Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 08.10.2010 17:54
Слияние двух бинарных файлов kakawkin Помощь студентам 7 29.03.2010 21:12
Обработка бинарных файлов (Си) Сэм Помощь студентам 35 01.05.2009 21:18
Чтение Бинарных Файлов Maksitron Общие вопросы C/C++ 6 23.02.2009 21:37