Ошибка неверного дескриптора в ReadFileEx при использовании корректного дескриптора в CreateFile - PullRequest
0 голосов
/ 07 октября 2011

Проблема, с которой я столкнулся: CreateFile возвращает дескриптор 0x194.ReadFileEx говорит, что этот дескриптор недействителен.(Ошибка 6.) Есть идеи?Переданный аргумент - «C: \ testfile.txt», который является допустимым текстовым файлом, который я создал в Блокноте.Несмотря на то, что я программист на C ++ последние 12 лет, я впервые пишу что-нибудь с помощью «windows.h» или потоков.

#include "stdafx.h"
#include "stdio.h"
#include "windows.h"

using namespace System;

int main(int argc, char **argv)
{
    if (argc != 2)
    {
        printf("To display a file, you must enter the filename as the only command argument.");
        scanf("\n");
        return 0;
    }
    HANDLE file;
    int nameLen = (strlen(argv[1]) + 1);
    wchar_t *filename = new wchar_t[nameLen];
    if (filename == 0)
    {
        printf("To display a file, you must enter the filename as the only command argument.");
        scanf("\n");
        return 0;
    }
    memset(filename, 0, nameLen);
    ::MultiByteToWideChar(CP_ACP, NULL, argv[1], -1, filename, nameLen);
    file = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (file == NULL)
    {
        printf("A valid filename is required.");
        scanf("\n");
        return 0;
    }
    char *buffer;
    buffer = new char[1024];
    OVERLAPPED overlapped;
    overlapped.Offset = overlapped.OffsetHigh = 0;
    ReadFileEx(file, &buffer, 1024, &overlapped, NULL);
    WaitForSingleObject(&file, 0);
    if (GetLastError() != ERROR_SUCCESS)
    {
        printf("A valid file is required., Error: %d", GetLastError());
        scanf("\n");
        return 0;
    }
    printf("%s", buffer);
    scanf("\n");
    delete buffer;
    return 0;
}

1 Ответ

1 голос
/ 07 октября 2011

Я думаю изменить
ReadFileEx(&file, &buffer, 1024, &overlapped, NULL);
до
ReadFileEx(file, &buffer, 1024, &overlapped, NULL);

...