【问题标题】:Windows function ReadFile keeps returning FALSE and don't know whyWindows 函数 ReadFile 一直返回 FALSE 不知道为什么
【发布时间】:2010-10-13 16:18:12
【问题描述】:

读取文件文本是一个非常简单的 C 代码,我以前也这样做过,但不知道为什么现在 ReadFile 函数一直返回 FALSE 意味着它失败了。

显然文本文件input.txt存在且CreateFile函数成功(或者至少不返回INVALID_HANDLE_VALUE

#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;
}

【问题讨论】:

  • 您应该使用GetLastError 来查看失败的原因
  • Thnx,GetLastError 给了我代码 6,表明 HANDLE 无效;但是当我将 hFile1 与 INVALID_HANDLE_VALUE 进行比较时,我没有问题。
  • if (hFile1 = CreateFile(...) == INVALID_HANDLE_VALUE)) 你真的认为这比两行表现更好吗: hFile1 = CreateFile();如果(hFile1 == INVALID_HANDLE_VALUE)?我不知道这条长线是如何执行的,但这种风格可能是一些令人惊讶的错误的原因。
  • 好的,亚历克斯,就是这样。我猜想用支架工作就足够了(虽然我认为这会是不好的造型)但看起来我错了。非常感谢,以后我会尽量避免这种糟糕的练习。
  • 彼得,您使用的表格可能风格不佳,但实际错误只是您的右括号 ) 放错了位置。它应该在== 的左侧。

标签: c windows


【解决方案1】:

错误是括号的简单错位。

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

【讨论】:

  • 呵呵,很好地展示了编码风格如何成为无底洞的错误来源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 2013-08-23
  • 2011-08-17
  • 2022-08-14
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多