nkorobkov
@nkorobkov

Как вывести результат работы функций WinAPI?

Допустим, я считываю содержимое файла при помощи ReadFile и сохраняю результат в переменную char buffer[100], как в примере:
#include "windows.h"
#include <iostream>
#include <fcntl.h>
#include <io.h>

using namespace std;

int WINAPI WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow)
{
	setlocale(LC_ALL, "Russian");
	char buffer[100];
	HANDLE file;
	bool isSucceed;
	LPWIN32_FIND_DATA find = 0;
	file = FindFirstFile(L"C:\\Users\\User\\Desktop\\LabOS_0\\Debug\\myfile.txt", find);
	if (file != INVALID_HANDLE_VALUE) {
		FindClose(file);
		isSucceed = ReadFile(file, buffer, 10, 0, 0);
	}

	for (int i = 0; i < 10; i++) {
		printf("%c", buffer[i]);
	}
	system("pause");
	return 0;
}

Почему результат не выводится в консоль и как вообще это делать?
  • Вопрос задан
  • 426 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Ваши ошибки.

1. Это разные дескрипторы.
FindFirstFile даёт дескриптор поиска файлов.
А ReadFile требует дескриптор файла, который можно получить через CreateFile.

2. Второй параметр FindFirstFile не может быть NULL. Это указатель на WIN32_FILE_DATA, в которую функция и будет кидать информацию о найденных файлах.

3. Если вы не ищете по маске и точно хотите открыть файл, на что вам FindFirstFile? Орудуйте сразу CreateFile.

4. Вы подключили пару излишних хедеров.

5. Не советую вместо нулевого указателя NULL писать 0.

6. В ReadFile два последних параметра не могут одновременно быть NULL: первый — для синхронного чтения, второй — для асинхронного.

В общем, «курите маны». Благо, у M$ они хорошие.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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