C Windows函数ReadFile不断返回FALSE和don';我不知道为什么

C Windows函数ReadFile不断返回FALSE和don';我不知道为什么,c,windows,C,Windows,读取文件文本是一个非常简单的C代码,我以前也这么做过,但不知道为什么现在ReadFile函数不断返回错误的意思,表示它失败了 显然,文本文件input.txt存在,CreateFile函数成功(或者至少没有返回无效的\u句柄\u值) #include <stdio.h> #include <windows.h> int main(int argc, char *argv[]) { char ReadBuffer[256] = {0}; HANDLE hF

读取文件文本是一个非常简单的C代码,我以前也这么做过,但不知道为什么现在ReadFile函数不断返回错误的意思,表示它失败了

显然,文本文件input.txt存在,CreateFile函数成功(或者至少没有返回无效的\u句柄\u值)

#include <stdio.h>
#include <windows.h>

int main(int argc, char *argv[])
{
    char ReadBuffer[256] = {0};
    HANDLE hFile1;
    int n = 0;
    DWORD bytesread = 5;

    printf("Press enter to read the file 'input.txt' ... ");
    getch();

    if ( (hFile1 = CreateFile(TEXT("input.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) == INVALID_HANDLE_VALUE))
    {
        printf("INVALID_HANDLE_VALUE");
        return -1;
    }

    if ( ReadFile(hFile1, ReadBuffer, bytesread, &bytesread, NULL) == FALSE )
    {
        printf("ReadFile ERROR");
        CloseHandle(hFile1);
        return -2;
    }

    printf("\n\nRead bytes: %d \n\n", bytesread);


    CloseHandle(hFile1);
    return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
char ReadBuffer[256]={0};
处理hFile1;
int n=0;
DWORD字节读=5;
printf(“按enter键读取文件'input.txt'…”;
getch();
if((hFile1=CreateFile(TEXT(“input.txt”),GENERIC\u READ,FILE\u SHARE\u READ,NULL,OPEN\u EXISTING,FILE\u ATTRIBUTE\u NORMAL,NULL)=无效的\u HANDLE\u值))
{
printf(“无效的句柄值”);
返回-1;
}
if(ReadFile(hFile1,ReadBuffer,bytesread,&bytesread,NULL)==FALSE)
{
printf(“读取文件错误”);
闭合手柄(hFile1);
返回-2;
}
printf(“\n\n读取字节:%d\n\n”,字节读取);
闭合手柄(hFile1);
返回0;
}

错误是简单的括号错位

if ( (hFile1 = CreateFile(TEXT("input.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)

错误是简单的括号错位

if ( (hFile1 = CreateFile(TEXT("input.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)

您应该使用来查看失败的原因Hnx,GetLastError给了我代码6,表示句柄无效;但是当我将hFile1与无效的\u HANDLE\u值进行比较时,我没有问题。如果(hFile1=CreateFile(…)==invalid\u HANDLE\u VALUE))您真的认为这比两行更好吗:hFile1=CreateFile();如果(hFile1==无效的\u句柄\u值)?我不知道这条长线是如何执行的,但这种风格可能会导致一些令人惊讶的错误。好的,亚历克斯,就是这样。我猜用括号工作就足够了(虽然我认为这会是糟糕的造型),但看起来我错了。很多情况下,我会尽量避免在将来进行这种糟糕的练习。彼得,你使用的形式可能很糟糕,但实际的错误只是把右括号放错了位置
。它应该在
==
的左边。您应该使用来查看它失败的原因Hnx,GetLastError给了我代码6,表示句柄无效;但是,当我将hFile1与无效的\u HANDLE\u值进行比较时,我没有问题。如果(hFile1=CreateFile(…)==INVALID\u HANDLE\u VALUE))您真的认为这比两行更好:hFile1=CreateFile();如果(hFile1==无效的\u句柄\u值)?我不知道这条长线是如何执行的,但这种风格可能会导致一些令人惊讶的错误。好的,亚历克斯,就是这样。我猜用括号工作就足够了(虽然我认为这会是糟糕的造型),但看起来我错了。很多情况下,我会尽量避免在将来进行这种糟糕的练习。彼得,你使用的形式可能很糟糕,但实际的错误只是把右括号放错了位置
。它应该在
==
的左边。呵呵,很好地演示了编码风格是如何成为无底bug源的。呵呵,很好地演示了编码风格是如何成为无底bug源的。