代码之家  ›  专栏  ›  技术社区  ›  kludg

同步读取文件读取的字节数

  •  4
  • kludg  · 技术社区  · 14 年前

    ReadFile(Handle, Buffer, 1024, Result, nil);
    

    呼叫成功,未发生错误。结果值(读取的字节数)是否可能小于1024(要读取的字节数)?

    我认为这是不可能的磁盘文件,我不知道其他资源,可以通过ReadFile访问。在编写可以使用不同资源的通用代码时,是否应该考虑上述场景?


    为了避免哲学上的猜测,我可以把这个问题重新表述如下:

    2 回复  |  直到 14 年前
        1
  •  4
  •   Marjan Venema    14 年前

    在给定的场景中,对于磁盘文件来说,接收的字节数不可能少于请求的字节数。

    一般的 可以与不同资源一起工作的代码,在位置+请求的字节数小于要传输的总字节数的情况下,不应总是依赖于接收请求的字节数。

        2
  •  0
  •   Serge Rogatch    9 年前

    当ReadFile返回的字节数小于文件所要求的字节数(即不是套接字、管道等)时,MSDN似乎只说了以下w.r.t.: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365467(v=vs.85).aspx

    我找不到任何证据证明ReadFile不会读取较小的文件块,并且当文件包含的字节数不少于最初请求的字节数时,返回该块的大小。因此,我编写的代码检查ReadFile返回多少字节,并再次调用ReadFile(在循环中),只要返回的字节总数小于请求的字节数,除非ReadFile返回0字节,这意味着根据MSDN的EOF。

    实际含义:

    1. 调用GetFileSizeEx并分配一个缓冲区,缓冲区的大小由该缓冲区报告 功能
    2. 调用ReadFile请求一次读取整个缓冲区
    3. 报告读取字节数的块