С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 03.07.2020
Сообщений: 21
1

Чтение файла и запись в массив байтов

06.07.2020, 15:49. Показов 2431. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот мой код
C++
1
2
3
4
5
6
7
ifstream ifs(filename, ios::binary | ios::ate);
        ifstream::pos_type pos = ifs.tellg();
 
        char* bytes = new char[pos];
 
        ifs.seekg(0, ios::beg);
        ifs.read(bytes, pos);
В bytes должны быть все байты из файла, но там получается только число 3, а сам файл большой 20 кб, в чем ошибка?

Добавлено через 2 минуты
И так я записываю потом в файл
C++
1
2
3
4
5
6
std::ofstream out;
        out.open("D:\\hello.txt");
        if (out.is_open())
        {
            out << bytes;
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2020, 15:49
Ответы с готовыми решениями:

Выполнить чтение всех байтов с файла с помощью FileInputStream в массив байтов
Выполнить чтение всех байтов с файла с помощью FileInputStream в массив байтов. Создать строку...

Чтение и запись байтов из файла
Подскажите пожалуйста каким образом магу прочесть .дат файл чтобы прочесть байты и обратно...

Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран
1.Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран...

ByteBuf запись и чтение массива байтов
Как можно в ByteBuf записать массив байтов и потом считать его? Я записываю: else if(obj...

6
2565 / 1277 / 468
Регистрация: 08.11.2016
Сообщений: 3,525
06.07.2020, 16:09 2
C++
1
2
3
4
ifstream ifs(filename, ios::binary);
ifs.seekg(0, ifs.end);
int len = ifs.tellg();
ifs.seekg(0, ifs.beg);
0
0 / 0 / 0
Регистрация: 03.07.2020
Сообщений: 21
06.07.2020, 16:33  [ТС] 3
Annemesski, попробовал, но все равно то же:
C++
1
2
3
4
5
6
7
ifstream ifs(filename, ios::binary);
        ifs.seekg(0, ifs.end);
        int len = ifs.tellg();
        ifs.seekg(0, ifs.beg);
 
        char* bytes = new char[len];
        ifs.read(bytes, len);
Добавлено через 9 минут
Он выводит просто первый символ из файла
0
2565 / 1277 / 468
Регистрация: 08.11.2016
Сообщений: 3,525
06.07.2020, 16:48 4
замените
C++
1
ifstream ifs(filename, ios::binary);
на
C++
1
ifstream ifs(filename, std::ifstream::binary);
и добавьте проверку
C++
1
2
3
4
5
    if (ifs)
      std::cout << "All (" << len << " bytes) was readed)" << std::endl;
    else
      std::cout << "error: " << ifs.gcount() << " bytes may be read";
    is.close();
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
06.07.2020, 17:34 5
Цитата Сообщение от Annemesski Посмотреть сообщение
замените на

C++
1
ifstream ifs(filename, std::ifstream::binary);
А смысл?

Мне вот почему-то кажется, что ТС читает бинарный файл в массив, а потом записывает этот массив как текстовые данные, что естественно нифига не прокатывает

Если уж считал бинарно, то и писать надо бинарно, т.е. чере write.

Добавлено через 1 минуту
Цитата Сообщение от derr0x Посмотреть сообщение
out << bytes;
Вот эта вот запись возьмет из bytes только байты до первого нуля, как у C-строки. Ну вот похоже 4-й байт у вас ноль, она и записала только 3.
0
0 / 0 / 0
Регистрация: 03.07.2020
Сообщений: 21
06.07.2020, 17:35  [ТС] 6
Annemesski, все уже работает, спасибо, но теперь проблема
Я обявляю глобальную переменную, там где должны лежать байты из файла:
C++
1
static char* _fileBytes[];
Этот метод считывает байты:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
static char* ReadAllBytes(char const* filename)
    {
        ifstream ifs(filename, ios::binary);
        ifs.seekg(0, ifs.end);
        int len = ifs.tellg();
        ifs.seekg(0, ifs.beg);
 
        char* bytes = new char[len];
        ifs.read(bytes, len);
        ifs.close();
 
        return bytes;
    }
И теперь я пытаюсь сделать это, то есть добавить к глобальной переменной эти байты:
C++
1
2
3
4
int main(){
        char* gg = ReadAllBytes(fileName);
        *_fileBytes = gg;
}
Но выдает ошибку: "инициализация переобразование "streamoff" в int возможна потеря данных"
"Не разрешен внешний символ"
0
2565 / 1277 / 468
Регистрация: 08.11.2016
Сообщений: 3,525
06.07.2020, 17:38 7
derr0x, скобки квадратные уберите в объявлении глобальной переменной
0
06.07.2020, 17:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.07.2020, 17:38
Помогаю со студенческими работами здесь

[UWP] Запись и чтение массива байтов StorageFile
Доброго времени суток. Перерыл все просторы интернета но на нужный след не наткнулся. Нашел только...

Чтение из файла и запись в массив
Здравствуйте! Проблема такая ... не работает программа скорее всего потому что не могу передать...

Чтение из файла и запись в массив
Доброго времени суток. Не получается записать содержимое файла в массив для поиска максимального...

Чтение из файла и запись в массив на с++
Добрый день. Хотелось бы попросить помощи. Необходимо считать данные из файла(данные измерений в...

Чтение из файла и запись в массив
Добрый день. Я застрял на приведении типов при чтении строки из файла и попытке записи ее элементов...

Чтение из файла и запись в массив
Есть текстовый файл с содержанием фамилии, занятого места и количества набранных баллов: Тик : 1...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru