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

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

Восстановить пароль Регистрация
 
ALEXDOC
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 38
29.11.2015, 10:28     Получить содержимое файла в виде массива байт #1
Доброго времени)
Мне нужно массив байт файла(любого,как 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 байт, сам создавал
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 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
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
29.11.2015, 11:03     Получить содержимое файла в виде массива байт #3
Можно так читать.
Надо проверить, что файл открылся прежде чем остальное делать. Слеш двойной должен быть в пути.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
29.11.2015, 11:21     Получить содержимое файла в виде массива байт #4
nmcf, А разве где-то сказано, что
1. вектор обязан выделять память непрерывным куском
2. разрешен прямой доступ к элементам (кроме индексации)?
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
29.11.2015, 13:01     Получить содержимое файла в виде массива байт #5
Цитата Сообщение от zss Посмотреть сообщение
разве где-то сказано, что
1. вектор обязан выделять память непрерывным куском
zss, вообще-то сказано. string не выделяет одним куском.
Да, доступ разрешён, вот пример посмотри: http://www.cplusplus.com/reference/vector/vector/data/
Yandex
Объявления
29.11.2015, 13:01     Получить содержимое файла в виде массива байт
Ответ Создать тему
Опции темы

Текущее время: 08:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru