@Vlad_beg

Как правильно считать файл при помощи WIN API?

Необходимо при помощи WIN API создаиь файл, записать в него структуру а затем вывести содержимое файла на экран. Файл создается, данные тоже записываются но на консоль содержимое файла не выводится, ошибок оже нету. Конкретно не захожит в цикл while.

LPCSTR fileName = "file.dat";
DWORD fielAttr = GetFileAttributesA(dir);
HANDLE hFile;
string fileDir = string(dir).append(fileName);

	if (fielAttr == FILE_ATTRIBUTE_DIRECTORY)
	{

		hFile = CreateFile(fileDir.c_str(), GENERIC_WRITE | GENERIC_READ, 0, NULL,
						   OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
		
		if (hFile != INVALID_HANDLE_VALUE) {

			cout << "File created...\n\n";
			struct Student st[3];

			cout << "Name: ";
			cin.getline(st[0].name, 40);
			cout << "Surname: ";
			cin >> st[0].surname;
			cout << "Average mark: ";
			cin >> st[0].averageMark;
			cout << "\n\n";

			DWORD dwBytesWritten;
			BOOL writeFile = WriteFile(hFile, &st, sizeof(st), &dwBytesWritten, NULL);

			if (writeFile) {
				cout << "Data has been written to a file!\n\n";
			}
			else {
				cout << "Failed to write data to file! Error code: " << GetLastError() << endl;
				return;
			}
	
		}
		else {
			cout << "Failed to create file. Error code: " << GetLastError() << endl;
			return;
		}
	}
	
	DWORD numberOfBytesToRead;
	char buff[255];
	BOOL readFile = ReadFile(hFile, &buff, sizeof(buff), &numberOfBytesToRead, NULL);
	
	if (readFile != NULL) {

		while (numberOfBytesToRead != 0) {
			cout << buff << endl;
		}
	}
	else {
		cout << "Failed to read file. Error code: " << GetLastError() << endl;
		return;
	}
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 1
https://docs.microsoft.com/en-us/windows/desktop/a...

If the function succeeds, the return value is nonzero (TRUE).
If the function fails, or is completing asynchronously, the return value is zero (FALSE). To get extended error information, call the GetLastError function.

Проверяйте, что возвращает функция ReadFile и если FALSE, то через GetLastError смотрите код ошибки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы