Как прочитать весь двоичный файл с помощью WINAPI? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть задача сохранить структуру в двоичный файл, а затем распечатать файл на консоль. Данные записываются в файл, но когда я читаю его, я получаю вывод только первое слово. Я предполагаю, что что-то упустил в своем коде. Буду признателен за вашу помощь.

struct Book
{
  char bookName[40];
  char author[40];
  float rating;
};

Book book;

int bookAmount  = 2;

for (int i = 0; i < bookAmount; i++){
  cout << "Book Name: ";
  cin >> book.bookName;

  cout << "Book Author: ";
  cin >> book.author;

  cout << "Rating: ";
  cin >> book.rating;

   DWORD dwBytesWritten;
   BOOL writeFile = WriteFile(hFile, &book, sizeof(book), &dwBytesWritten, NULL);
}
DWORD numberOfBytesToRead;
char buff[255];

HANDLE hFile = CreateFile("file.dat", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
BOOL readFile = ReadFile(hFile, &buff, sizeof(book), &numberOfBytesToRead, NULL);

  if (readFile != 0) {

    while (numberOfBytesToRead != 0) {
      cout << buff << endl;
      ReadFile(hFile, &buff, sizeof(book), &numberOfBytesToRead, NULL);
    }

  }

1 Ответ

3 голосов
/ 05 апреля 2019
BOOL readFile = ReadFile(hFile, &buff, sizeof(book), &numberOfBytesToRead, NULL);
cout << buff << endl;

Вы читаете в char[255], а не Book структуру.Следовательно, название книги заканчивается на \ 0, поэтому печатается только это.cout работает с массивом символов, а не со структурой.

Между прочим, неправильный способ хранения / получения данных.Склонен к проблемам безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...