Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

29.11.2015, 10:28. Просмотров 381. Ответов 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 байт, сам создавал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2015, 10:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Получить содержимое файла в виде массива байт (C++):

Присвоить переменной типа int содержимое четырёх байт из массива - C++
Есть массив байт. Нужно выбрать из него четыре байта подряд (например, со второго по пятый) и вернуть как int.

Прочитать из бинарного файла байт номер 0 и отобразить его на дисплее в виде числа - C++
прочитать из бинарного файла байт номер 0 и отобразить его на дисплее в моем коде программа читает символ и на экране печатает аски...

Как сложить два float-а, имея их представление в виде массива байт? - C++
Здравствуйте. Нужна помощь. Я храню float числа в виде массива 4-х байтов. Подскажите как не переводя массив обратно во float,...

Сохранение данных массива из файла в виде матрицы - C++
В файле данные одномерного массива, нужно эти данные сохранить в другой файл в виде матрицы 3x5, подскажите как это сделать. Пишу...

Как можно считывать инфу с файла в виде массива строк? - C++
Возникла проблема в написании программы, суть в том что я ввожу инфу в файл, все норм записует... а когда считую ее назад получается...

Вывести старший и младший байт заданного целого положительного числа в шестнадцатиричном и двоичном виде - C++
Дано целое положительное число , тип int. Вывести старший и младший байт в 16ом и в 2ом виде.

4
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,866
Завершенные тесты: 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);
0
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
29.11.2015, 11:03 #3
Можно так читать.
Надо проверить, что файл открылся прежде чем остальное делать. Слеш двойной должен быть в пути.
0
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,866
Завершенные тесты: 1
29.11.2015, 11:21 #4
nmcf, А разве где-то сказано, что
1. вектор обязан выделять память непрерывным куском
2. разрешен прямой доступ к элементам (кроме индексации)?
0
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
29.11.2015, 13:01 #5
Цитата Сообщение от zss Посмотреть сообщение
разве где-то сказано, что
1. вектор обязан выделять память непрерывным куском
zss, вообще-то сказано. string не выделяет одним куском.
Да, доступ разрешён, вот пример посмотри: http://www.cplusplus.com/reference/vector/vector/data/
1
29.11.2015, 13:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2015, 13:01
Привет! Вот еще темы с ответами:

Пользователь вводит имя файла, программа выводит содержимое файла с указанием номеров строк. - C++
Пользователь вводит имя файла, программа выводит содержимое файла с указанием номеров строк. Если пользователь вводит не существующий...

Добавить в конец первого файла содержимое второго файла - C++
Text6. Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла. Помогите пожалуйста с решением, а желательно с...

Из одного файла данных получить два массива (один с числами, другой - с буквами) - C++
Имеется файл данных, где первая колонка - буквы, а остальные три колонки - числа. Надо записать буквы в один массив, а числа - в другой...

Cчитывание из файла блоками по 8 байт - C++
1.Исходный файл читается блоками по 8 байт 2.Работу с файлами осуществляться в двоичном формате в стиле C++ (с помощью функций...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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