Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ALEXDOC
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 44
Завершенные тесты: 1
#1

Получить содержимое файла в виде массива байт - C++

29.11.2015, 10:28. Просмотров 281. Ответов 4
Метки нет (Все метки)

Доброго времени)
Мне нужно массив байт файла(любого,как txt , так и exe), но стал использовать вектор для начала.
Написал вот такую штуку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
#include <vector>
 
using namespace std;
 
int main()
{
    ifstream stream("D:\Test.txt");
    stream.seekg(0, ios::end);
    vector<char> data(stream.tellg());
    stream.seekg(0, ios::beg);
    stream.read(data.data(), data.size());
 
    return 0;
}
При запуске вылетает исключение :

Возникло необработанное исключение по адресу 0x74F93E28 в MD5_TestOne.exe: исключение Microsoft C++: std::bad_alloc по адресу памяти 0x0095F108.

Читал, что это переполнение вектора или что то вроде того(могу ошибаться)
Буду очень признателен, если укажите на мои ошибки или плохой код.

p.s. файл 4 байт, сам создавал
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2015, 10:28     Получить содержимое файла в виде массива байт
Посмотрите здесь:
Присвоить переменной типа int содержимое четырёх байт из массива C++
Прочитать из бинарного файла байт номер 0 и отобразить его на дисплее в виде числа C++
C++ Как сложить два float-а, имея их представление в виде массива байт?
C++ Сохранение данных массива из файла в виде матрицы
C++ Как можно считывать инфу с файла в виде массива строк?
C++ Вывести старший и младший байт заданного целого положительного числа в шестнадцатиричном и двоичном виде
C++ Пользователь вводит имя файла, программа выводит содержимое файла с указанием номеров строк.
C++ Добавить в конец первого файла содержимое второго файла
C++ Из одного файла данных получить два массива (один с числами, другой - с буквами)
C++ Cчитывание из файла блоками по 8 байт
C++ Как прочитать несколько байт из файла с n-го бита
Записать в файл первые n байт другого файла C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6276 / 5879 / 1902
Регистрация: 18.12.2011
Сообщений: 15,076
Завершенные тесты: 1
29.11.2015, 10:44     Получить содержимое файла в виде массива байт #2
Цитата Сообщение от ALEXDOC Посмотреть сообщение
stream.read(data.data(), data.size());
Так в вектор читать нельзя
Читайте во временную переменную, а потом присваивайте элементам вектора.
C++
1
2
3
4
5
    ifstream stream("D:\\Test.txt");
    vector<char> data;
    char t;
    while(stream>>t)
        data.push_back(t);
nmcf
5101 / 4421 / 1471
Регистрация: 14.04.2014
Сообщений: 17,519
29.11.2015, 11:03     Получить содержимое файла в виде массива байт #3
Можно так читать.
Надо проверить, что файл открылся прежде чем остальное делать. Слеш двойной должен быть в пути.
zss
Модератор
Эксперт С++
6276 / 5879 / 1902
Регистрация: 18.12.2011
Сообщений: 15,076
Завершенные тесты: 1
29.11.2015, 11:21     Получить содержимое файла в виде массива байт #4
nmcf, А разве где-то сказано, что
1. вектор обязан выделять память непрерывным куском
2. разрешен прямой доступ к элементам (кроме индексации)?
nmcf
5101 / 4421 / 1471
Регистрация: 14.04.2014
Сообщений: 17,519
29.11.2015, 13:01     Получить содержимое файла в виде массива байт #5
Цитата Сообщение от zss Посмотреть сообщение
разве где-то сказано, что
1. вектор обязан выделять память непрерывным куском
zss, вообще-то сказано. string не выделяет одним куском.
Да, доступ разрешён, вот пример посмотри: http://www.cplusplus.com/reference/vector/vector/data/
Yandex
Объявления
29.11.2015, 13:01     Получить содержимое файла в виде массива байт
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru