ReadFile函数

2023-05-16

函数功能:该函数从文件指针指示的位置开始从文件读数据,在读操作完成后,如果文件句柄不是用重叠属性来创建,则文件指针用实际读的字数来调整。
  如果文件句柄为重叠的输入和输出(I/O)操作而创建,则应用程序必须在读操作之后调整文件指针的位置。
  函数原型:BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
  参数:
  hFile:指向要读的文件的句柄,文件句柄一定用 GENERIC_READ 对文件的访问来创建。
  Windows NT:对于异步读操作,hFile 可为任何一个句柄,该句柄可以通过 CreatFile函数用 FILE_FLAG_OVERLAPPED 标志来打开或通过插孔或接收函数返回的插孔句柄来打开。
  Windows 95:对于异步读操作,hFILE 可以是一个通信源、邮件插孔或命名的管道句柄,此管道句柄通过 CreatFile 用 FILE_FLAG_OVERLAPPED 标志来打开或通过插孔或接收函数返回的插孔句柄来打开,Windows 95 不支持磁盘文件的异步读操作。
  lpBuffer:指向一个从文件存取数据的缓冲区的指针。
  nNumberOfBytesToRead:从文件读的字节数目。
  lpNumberOfBytesRead:指向一个读字节数的指针,在做任何工作或错误检测之前,ReadFile 把此值设置为零,当 ReadFile 在命名管道上返回 TRUE 时,如果此参数为零,则用 nNumberOfBytesToWrite 调用 WriteFile 函数的信息模块将管道的另一端设置为零。
  Windows NT:如果 lpOverlapped 为 NULL,则 lpNumberOfBytesRead 不为 NULL;如果 lpOverlapped 不为 NULL,则 lpNumberOfBytesRead 可以为 NULL,如果这是一个重叠写操作,则可通过调用 GetQueuedCompletionStatu s 来得到读字节的数目。
  Windows 95 或 Windows 98:此参数不能为 NULL。
  lpOverlapped:指向一个OVERLAPPED 结构的指针,如果用 FILE_FLAG_OVERLAPPED 来创建 hFile,则需要此结构,如果用 FILE_FLAG_OVERLAPPED 来打开 hFile,则 lpOverlapped 参数一定不是 NULL,它必须指向一个有效的 OVERLAPPED结构,如果 hFile 是由 FILE_FLAG_OVERLAPPED 创建且 lpOverlapped 为 NULL,则函数可不正确地记录关于读操作是完全的。
  如果 hFile 用 FILE_FLAG_OVERLAPPED 打开,且 lpOverlapped 不为 NULL,则读操作在 OVERLAPPED 结构中指定的位移处开始,在完成操作之前,且 ReadFile 可以返回在这种情况下 ReadFile 返回 FALSE 且 GetLastError 函数返回 ERROR_IO_PENDING 这使在读操作完成时,调用应用系统继续。在 OVERLAPPED 结构中指定的事件被设置为读操作完成的发送信号状态。
  如果 hFile 不用 FILE_FLAG_OVERLAPPED 打开,且 lpOverlapped 不为 NULL,则读操作在当前文件位置开始且至操作完成,ReadFile 函数返回。
  如果 hFile 不用 FILE_FLAG_OVERLAPPED 打开,且 lpOverlapped 不为 NULL,则读操作 OVERLAPPED 结构指定的位移处开始,直到操作完成,ReadFile 函数返回。
  返回值:当下列之一的为真时,ReadFile 函数返回。写操作的管道写终端完成,请求读的字节数目或出现错误。如果函数调用成功,则返回值为非零值。如果返回值为非零值,且读字节数目为零,则在读操作时文件指针超出文件终端。但是,如果文件用 FILE_FLAG_OVERLAPPED 打开且 lpOverlapped 不为 NULL,则返回值为 FALSE,且当文件指针超过文件当前终端时 GetLastError 函数返回 ERROR_HANDLE_EOF。如果函数调用失败,则返回值为零。若想获得更多错误信息,请调用 GetLastError 函数。
  文件访问一定在文件内字节位移处开始,该文件为容量扇区大小的整数倍,为决定一个容量扇区的大小,调用 GetDiskFreeSpace 函数。
  文件访问必须是对于字节数目的访问,该字节数目为容量扇区大小的整数倍,例如如果扇区大小为512字节,应用程序可以请求512、1024或2048字节的读和写访问,但不是335、981、7171字节。缓冲区对读、写操作的地址一定为对齐扇区(在内存地址上对齐,该内存为容量扇区大小的整数倍)。一种对齐扇区的缓冲区的方法是用 VirtualAlloc 函数来分配缓冲区,此函数分配内存,该内存在为系统页面大小的整数倍的地址上对齐,因为无论是页面还是扇区大小都是2的幂,用系统页面大小的倍数对齐的内存也可用容量扇区大小的倍数来对齐调整(‘对齐’改为‘调整’)。
  在读操作正在有缓冲区时访问输入缓冲区,则可导致输入缓冲区数据的破坏,直到读操作完成为止,应用程序才能读、写重分配或释放一个正被一个读操作使用的输入缓冲区。
  如果一个命名的管道正在信息模块中读且狭义个信息比 nNumberOfBytesToRead 参数长,则 ReadFile 返回 FALSE 且 GetLastError 返回 ERROR_MODE_DATA,剩下的信息也许通过下一次对 ReadFile 或 PeekNamePipe 函数的调用来读。
  当从通信设备来读数据时,且当用 SetCommTimeouts 和 GetCommTimeouts 函数来设置和检取超时时,ReadFile的行为由当前通信超时来操纵,如果不能设置超时时,则会出现不可预料的结果,有关信息超时更详细的资料,参见 COMMTIMEOUTS。
  如果 ReadFile 试图从缓冲区太小的邮件插孔读数据,则函数返回 FALSE 且 GetLastError 函数返回 ERROR_INSUFFICENT_BUFFER。
  如果匿名写通道句柄已经被关闭且 ReadFile 试图用相应的匿名读通道句柄来读,则函数返回 FALSE 且 GetLastError 返回 ERROR_BROKEN_PIPE。
  当不足够多的明显异步 I/O 请求时,ReadFile 函数可能失败且返回 ERROR_INVALID_USER_BUFFER 或 ERROR_NOT_ENOUGH_MEMORY。
  ReadFile 代码为状态文件终端而检测与异步和同步读操作不同。
  当一个同步读操作到达文件末尾时,ReadFile 返回 TRUE 且把 lpNumberOfBytesResd 设置为零,下列样本代码用来为同步读操作文件末尾的检测。
  // Attempt a synchronous read operation
  bResut = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
  // Check for end of file
  if(bResult&nBytesRead==0)
  {// we're at the end of the file}
  在其始的 ReadFile 调用期间,或下一步异步操作期间,一个异步读操作可以遇到文件的末尾。
  如果对于异步读操作在 ReadFile 时间 EOF 被删除,则 ReadFile 返回 FALSE 且 GetLastError 返回 ERROR_HANDLE_EOF。
  如果下一次异步操作期间 EOF 被删除,对 GetOverlappedResult 的调用,可以导致操作返回 FALSE 且 GetError 返回 ERROR_HANDLE_EOF。
  用 Cancel 函数来取消所有未知异步 I/O 操作,此函数只取消由关于指定文件句柄的调用线程发布的操作,被取消的 I/O 操作用错误 ERROR_OPERATION_ABORTED 来完成。
  如果试图从一个没有软盘的软驱中读数据,则系统显示一个信息框告诉用户重新执行此操作,为避免系统显示此信息框,用 SEM_NOOPENFILEERRORBOX 来调用 SetErrorMode 函数。
  Windows CE:lpOverlapped 参数一定被设置为 NULL,Windows CE 不允许用重叠属性来创建文件,Windows CE 不支持对文件的异步读操作。
  速查:Windows NT 3.1及以上版本、Windows 95及以上版本、Windows CE 1.0及以上版本,头文件:winbase.h;库文件:kernel32.lib。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ReadFile函数 的相关文章

  • 如何在 Python 中读取文本文件

    使用 Python 应用程序时 您需要使用 Python 读取和写入文本文件 您可以参考我们的其他教程用Python编写文本文件 在 Python 中读取文本文件是一个简单的过程 可以使用几种不同的方法来完成 在本文中 我们将介绍以下在 P
  • 是否应该定期调用 GC.Collect() ? [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我最近发布了一篇关于日志文件读取器因内存不足错误而失败的文章 gt 归档日志文件时内存不足错误 在我有机会尝试更简单的方法 将日志文件命名为带有日期以防止存档 之前 这显然意味着重写方法等
  • ReadFile() 说失败,但错误代码是 ERROR_SUCCESS

    我在用着ReadFile 在 Windows 上从串行端口读取数据 这段代码在某个时间点工作得很好 但现在失败了 我正在尝试找出问题的根源 所以我怀疑这是串行配置或超时的问题 因为这些都没有改变 ReadFile 返回 false 表明发生
  • 将文件内容读入ArrayList

    在之前的项目中 我需要将文件内容读取到数组中 现在我必须做同样的事情 只是我必须将内容读入 ArrayList 我遇到的几个问题是 如何逐步浏览 ArrayList 并分别添加每个项目 如果文件包含超过 10 个输入 则必须退出 我已经尝试
  • 如何将python变量传递给html变量?

    我需要从 python 中的文本文件读取 url 链接作为变量 并在 html 中使用它 文本文件 file txt 仅包含一行 http 188 xxx xxx xx 8878 这一行应该保存在变量 link 中 然后我应该在html中使
  • 从文本文件读取数据并创建对象

    我需要一些帮助 我正在 Java 上进行超市模拟 但我遇到了一个问题 我有一个文本文件 Stock txt 其中包含超市的所有库存 例如 0 面包店 巧克力蛋糕 12 5 250 1 肉 优质牛排 2 6 120 2 海鲜 金枪鱼 1 2
  • 在循环中使用 Promises 和 fs.readFile

    我试图理解为什么下面的承诺设置不起作用 注意 我已经使用 async map 解决了这个问题 但我想了解为什么我的以下尝试不起作用 正确的行为应该是 bFunc 应根据需要运行多次以读取所有图像文件 下面的 bFunc 运行两次 然后 cF
  • 归档日志文件时内存不足错误

    我在运行控制台作业时遇到问题 该作业运行并创建我在午夜存档的每日日志文件 这将创建一个第二天的空白日志文件和一个存档文件 其中名称中包含昨天的日期以及旧文件的内容 用于调试我可能遇到但直到第二天才知道的问题 然而 自从我启动 BOT 的工作
  • PHP 流媒体 MP3

    我和提问者的情况很相似 我可以使用 PHP 提供 MP3 文件吗 https stackoverflow com questions 1516661 can i serve mp3 files with php基本上我试图保护 mp3 文件
  • 批量从文件中读取多行

    我想知道是否有一种方法可以从文件中批量读取多行 例如 with open filename rb as f for n lines in f process n lines 在这个函数中 我想做的是 对于每次迭代 将从文件中批量读取接下来的
  • NodeJS - 如何删除文本文件的第一行而不读取所有行?

    我的 S3 存储桶中有以下文件 field1 field2 field3 VAL11 VAL12 VAL13 VAL21 VAL22 VAL23 VAL31 VAL32 VAL33 最终目标是仅删除文件的第一行field1 field2 f
  • 如何使用 HTML 5 FileReader 读取本地文件? [复制]

    这个问题在这里已经有答案了 客观的 我正在制作一个应用程序 我需要使用 JavaScript 和 HTML 5 读取本地文件 而不需要任何
  • 中止读取文件时 PHP 页面超时

    我有一个简单的 php 视图 如下所示 header Content Type image png readfile this gt image exit 在这个例子中 this gt image例如 data pictures thumb
  • Javascript fs.readFileSync 返回什么编码?

    考虑以下 Node js Javascript 程序 var fs require fs var encoding1 var encoding2 var a fs readFileSync testdoc pdf var b new Buf
  • Node.JS 中的 createReadStream

    所以我使用了 fs readFile 它给了我 致命错误 CALL AND RETRY LAST 分配失败 进程超出 记忆 由于 fs readFile 在调用回调之前将整个文件加载到内存中 我应该使用 fs createReadStrea
  • CLion C++ 无法读取/打开项目目录中的 .txt 文件

    我的项目目录中有一个我创建并填充了数据的 txt 文件 目录结构如下 Users asd ClionProjects ProjectWithTemplates main cpp cmake twoday txt 这是我的代码 include
  • C# - 定期读取文件最后部分的最有效方法

    我想定期读取正在写入的日志文件 该程序将定期读取日志文件内容并解析它以提取一些值 但我不想每次都读取整个文件 有没有办法从特定行开始读取文件 例如 第一次读取该文件有 100 行 我记下这个值 下次读取时我会从第 100 行开始读取并存储当
  • Fortran 读取混合文本和数字

    我正在使用 Fortran 90 读取包含以下格式数据的文件 number 125 var1 2 var2 1 var3 4 number 234 var1 3 var2 5 var3 1 我尝试了以下命令并且工作正常 read 2 tem
  • readRDS 无法读入 R 中的文件。是否有替代方案?

    我正在尝试读取从此处下载的 RDS 文件 https github com jheng5 googleCharts tree master inst examples bubble https github com jcheng5 goog
  • 错误:找不到符号 array.add(element);

    我有一个程序 它从文件中读取 获取每个单词并将其作为字符串添加到数组中 我在将字符串添加到数组时遇到了一些麻烦 我收到错误 SortingWords java 73 error cannot find symbol array add el

随机推荐

  • Focal loss变种汇总

    VariFocal loss 只对负样本做难易样本挖掘 xff08 正样本数量少 xff0c 不做loss压缩 xff09 Generalized Focal loss xff1a quality focal loss 43 distrib
  • 视觉Transformer中的位置编码方式

    绝对位置编码 基本形式 xff1a x 61 x 43 p 可学习的绝对位置编码 xff08 ViT xff09 ViT中提出的位置编码方式简单粗暴 xff0c 设置一组可学习的编码tokens xff0c 并在patch embeding
  • 秋招问题汇总

    1 Python变量作用域 xff1a 局部作用域 xff08 Local xff0c 简写为 L xff09 作用于闭包函数外的函数中的作用域 xff08 Enclosing xff0c 简写为 E xff09 全局作用域 xff08 G
  • 38、OpenCV之C++教程

    一 OpenCV的下载与安装 下载完成后会得到一个 opencv 3 4 15 vc14 vc15 exe 文件 点击运行后会生成一个文件夹 此文件夹为下一步工程创建使用 xff0c 文件夹可移动 复制和重命名 xff0c 这里命名如下 x
  • Java大数据之路--HDFS详解(3)--基本命令

    HDFS 分布式文件存储系统 基本命令 目录 HDFS 分布式文件存储系统 基本命令 一 常见命令 二 其他命令 一 常见命令 命令 说明 hadoop fs mkdir park 在hdfs 的根目录下 xff0c 创建 park目录 h
  • C# 连接 SqlServer 数据库

    目录 一 创建表 二 给表添加数据 三 新建 C 项目 四 SqlServerHelper 五 连接数据库 一 创建表 首先 xff0c 新建一个数据库 Test xff0c 然后新建一个表 Users xff0c 字段名如下图 xff0c
  • org.xml.sax.SAXParseException的错误解决 2020-11-20

    span class token number 2020 span span class token operator span span class token number 11 span span class token operat
  • JS如何优雅的删除对象中的指定属性?

    要优雅的话 xff0c 使用 Lodash 的 omit 方法移除不要的属性 xff1a const object 61 a 1 b 2 c 3 const result 61 omit object a c 61 gt b 2 或者用 p
  • python 使用 isdigit 判断字符串中是否只由数字组成

    span class token operator span span class token operator span span class token operator span span class token operator s
  • 快速排序详解(Java实现)

    一 快速排序的基本思想 每一轮的排序都会将区域分割成两个独立的分区 xff0c 其中左分区的序列的所有值均会比右分区的所有值小 然后对子分区进行同样的分割操作 xff0c 最后达到整体有序 在排序的过程中 xff0c 由于已经分开的两部分的
  • A*算法路径规划之Matlab实现

    A 算法路径规划之matlab实现 A 算法是一种传统的路径规划算法 xff0c 相较于Dijkstra算法 xff0c 其引入了启发式算子 xff0c 有效的提高了路径的搜索效率 主要步骤包括 xff1a 1 xff09 设置起始点 目标
  • C语言中‘a‘和“a“有什么区别?

    1 本质区别 双引号里面的是字符串 xff0c 而单引号里面的代表字符 2 输出区别 str 61 a 输出的就是a这个字母 xff1b str 61 a 输出的测试65 3 底层区别 用单引号引起的一个字符实际上代表一个整数 xff0c
  • linux VNC客户端登陆失败

    vnc登陆出现 Unknown authentication scheme from VNC server 解决办法 xff08 建议在做操作之前重启vnc server xff0c 密码输错过多可能导致一直连接失败 xff09 https
  • win 10 mstsc连接 RemoteApp

    本文是关于mstsc客户端的配置 xff08 服务端的配置本文不描述 xff09 xff0c 前提是服务端配好 xff0c 知道RemoteApp怎么玩的 windows 2008 的mstsc有个配置 xff0c 关于程序 的tab页 但
  • 贪心算法的改进

    关于贪心算法 xff0c 请看我的上一篇博客 解决贪心算法的复杂度 为解决贪心算法的复杂度 本文提出 xff1a 通过分解极大联通子图去寻找影响力最大的节点的算法 强连通 xff1a 在有向图G中 xff0c 如果任意两个不同的顶点相互可达
  • 非关系型数据库-redis应用场景

    关系型数据库与非关系型数据库 redis的应用场景 xff1a 1 redis由于数据的读取和操作都在内存当中操作 xff0c 读写的效率较高 xff0c 所以经常被用来做数据的缓存 把一些需要频繁访问的数据 xff0c 而且在短时间之内不
  • Linux创建用户后,登录报错/usr/bin/xauth: file /home/user/.Xauthority does not exist

    错误信息如下 usr bin xauth span class token function file span home user Xauthority does not exist 错误原因 是因为添加用户时没有授权对应的目录 xff0
  • VSCode测试ES6语法

    一 VsCode使用 1 1 VsCode基本操作 Alt 43 Shift 43 F格式化代码 二 ES6新特性 2 1 let声明常量 2 2 const声明常量 只读变量 2 3 解析表达式 2 3 1 数组解构 2 3 2 对象解构
  • VNC远程连接树莓派报错问题解决(文末有惊喜呦)

    用VNC远程连接树莓派 xff0c 出现拒绝连接 问题原因 xff1a 只设置了PC端的服务器 xff0c 但是没有在树莓派端开端口 解决办法 xff1a 用putty或者xshell连接树莓派 xff0c 输入命令 xff1a vncse
  • ReadFile函数

    函数功能 xff1a 该函数从文件指针指示的位置开始从文件读数据 xff0c 在读操作完成后 xff0c 如果文件句柄不是用重叠属性来创建 xff0c 则文件指针用实际读的字数来调整 如果文件句柄为重叠的输入和输出 xff08 I O xf