Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
 Аватар для cr0manty
2 / 2 / 0
Регистрация: 06.02.2018
Сообщений: 15

Открыть файл в бинарном виде

09.10.2018, 00:09. Показов 4081. Ответов 3

Author24 — интернет-сервис помощи студентам
нужно считать данные из файла в бинарном виде. нельзя использовать библиотеку <fstream>, как это сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2018, 00:09
Ответы с готовыми решениями:

Не удаётся открыть файл в бинарном режиме
Всем привет. Вроде делаю всё по примеру, но первый файл открывается, а второй файл (который пытаюсь открыть в бинарном режиме) проверку...

Как открыть файл для чтения в БИНАРНОМ режиме?
Друзья! Файл, который надо открыть БИНАРНЫЙ, в нём два байта. Содержание файла 33 20 00 00 имя &quot;input&quot; Вот по логике...

Сохранение структуры списка в бинарном виде в файл
Всем здравствуйте. Суть вопроса такова. Есть двусвязный список сделанный собственноручно без использования STL. Задача состоит в записи в...

3
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
09.10.2018, 00:18
Использовать библиотеку cstdio или системные API. Первое чуть проще, даже готовые примеры имеются.

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/* fread example: read an entire file */
#include <сstdio>
#include <сstdlib>
 
int main () {
  FILE * pFile;
  long lSize;
  char * buffer;
  size_t result;
 
  pFile = fopen ( "myfile.bin" , "rb" );
  if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
 
  // obtain file size:
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);
 
  // allocate memory to contain the whole file:
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
 
  // copy the file into the buffer:
  result = fread (buffer,1,lSize,pFile);
  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
 
  /* the whole file is now loaded in the memory buffer. */
 
  // terminate
  fclose (pFile);
  free (buffer);
  return 0;
}
Этот пример взят с cplusplus.com, однако по нему есть замечания.

C++ Скопировано
1
2
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
Для бинарного режима стандарт не требует реализации этой возможности, поэтому получение размера файла таким способом может не работать.
0
 Аватар для cr0manty
2 / 2 / 0
Регистрация: 06.02.2018
Сообщений: 15
09.10.2018, 21:00  [ТС]
Цитата Сообщение от valen10 Посмотреть сообщение
Использовать библиотеку cstdio или системные API. Первое чуть проще, даже готовые примеры имеются.
Вот нужно winapi, а как там открыть в бинарном виде?
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
09.10.2018, 22:39
WinAPI без разницы, что там в файле, эти функции будут читать/записывать данные блоками. Т.е. как в бинарном режиме. Бинарный/текстовый режим работы с файлом влияет только на способ обработки управляющих символов.

Набросал небольшой пример. Надеюсь, поможет. А вообще, с этим вопросом лучше было в ветку C++: WinAPI обратиться, там больше специалистов по этой теме обитает.

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <Windows.h>
#include <iostream>
using namespace std;
 
int main()
{
    const char fname[] = "input.txt";
 
    // Открыть существующий файл для чтения.
    HANDLE hFile = CreateFile(
        fname,                      // Имя файла или путь к нему.
        GENERIC_READ,               // Описание доступа, чтение и/или запись.
        FILE_SHARE_READ,            // Общий доступ к файлу: несколько процессов могут выполнять чтение.
        NULL,                       // Аттрибуты безопасности: по умолчанию.
        OPEN_EXISTING,              // Действия для несуществующих файлов: открыть, только если файл существует.
        FILE_ATTRIBUTE_NORMAL,      // Аттрибуты файла: обычный файл.
        NULL);                      // Аттрибуты template не указаны.
    
    // Проверка открытия файла.
    if (hFile == INVALID_HANDLE_VALUE) {
        cout << "The file has not been opened." << endl;
        return 1;
    }
 
    // Получить размер файла.
    size_t file_size = GetFileSize(
        hFile,                      // Дескриптор открытого файла.
        NULL);                      // Старшая часть размера файла. Для файлов до 4Гб не требуется.
 
    cout << "File size: " << file_size << endl;
 
    DWORD read_length = 0;
    char *buf = new char[file_size];
 
    ReadFile(
        hFile,                      // Дескриптор открытого файла.
        buf,                        // Буфер для чтения.
        file_size,                  // Количество байт для чтения из файла.
        &read_length,               // Фактически прочитано байт.
        NULL);                      // Указатель на структуру OVERLAPPED, если файл открыт с флагом FILE_FLAG_OVERLAPPED.
 
    cout << "Read bytes: " << read_length << endl;
    cout << endl;
 
    for (int i = 0; i < read_length; i++) {
        cout << buf[i];
    }
 
    // Закрыть файл.
    CloseHandle(hFile);
 
    delete[] buf;
 
    return 0;
}
Подробнее о работе с функциями лучше читать в документации от MS: CreateFileA, GetFileSize, ReadFile, CloseHandle.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2018, 22:39
Помогаю со студенческими работами здесь

Как записать объект с полем типа std::string в бинарном виде в файл и считать его обратно?
Знаю как записывать объекты в файл в бинарном виде, но как быть, когда у них динамические поля? Какой метод использовать? Можете привести...

Как открыть файл в 16 виде
Как открыть файл в шестнадцятиричном виде? Добавлено через 8 минут Вернее посмотреть даные файла в 16 виде

Как открыть файл в виде набора символов?
Ну никак не могу понять как открыть файл любого типа(не только тхт) в виде текста(имею в виду набор символов). Открыть, сохранить этот...

Открыть ftp.exe, открыть соединение с FTP-сервером, залогиниться, загрузить файл в бинарном режиме и выйти
С помощью .bat мне нужно открыть ftp.exe, открыть соединение с ftp сервером, залогиниться, залить файл в бинарном режиме, выйти. Я...

Как считать файл в бинарном виде?
как считать абсолютно любой файл в бинарном виде (в виде двоичного кода) и записать эти данные, например в файл


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи будет применено как метод обработки данных из double buffering. Формулы от LM конечно с ошибками.
Hrethgir 10.04.2025
В продолжение Эта LM дала ответ похожий на нормальный. В комментриях мой комментарий - похоже она ошиблась с выведением итоговой формулы, но остальные проверю. Assistant qwen2. 5-14b-instruct . . . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Линейное решение не линейной задачи (емкость вычислений в сравнении с традиционными решениями пока не определена).
Hrethgir 10.04.2025
В рамках предстоящих вычислений пришлось (да, я тоже знаю про корень числа, и про степеня, и прочие теоремы, но. . . ) найти способ нахождения отношения двух углов. . . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
Подключение Kafka к Elasticsearch
Codd 09.04.2025
Apache Kafka и Elasticsearch — две мощные технологии, которые при совместном использовании создают эффективную платформу для обработки и анализа данных в реальном времени. Kafka, выступая в роли. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер