CreateFile之类的几个函数

2023-11-08

这几天看windows API一日一练,博主给画出了道道,我来填填具体点的内容。

 

         需求:想操作文件、串口、并口、USB等等。

         原理层:其实很简单,就三步:打开,操作,然后关闭。

         实践层1:打开用CreateFile,读写操作用WriteFileReadFile,关闭用CloseHandle

         实践层2:学习各个API怎么用。

 

         学习API,不就是先了解其作用,再瞅瞅返回值,最后学习学习参数怎么用么。

 

1CreateFile

<作用>CreateFile:打开或创建一个文件、串口、并口、USB等等。还可以打开路径喔,亲。

<返回值>成功返回句柄,dwCreationDisposition设为CREATE_ALWAYSOPEN_ALWAYS时,GetLastError返回ERROR_ALREADY_EXISTS。失败返回INVALID_HANDLE_VALUE

<参数介绍>

HANDLECreateFile(

  LPCTSTRlpFileName,文件路径。ANSI:最大MAX_PATH个字符;Unicode:最大32767and prepend "\\?\" to the path.

  DWORDdwDesiredAccess,访问方式,如GENERIC_READ

  DWORDdwShareMode,读写的共享方式。为0时,不共享读写,对象不能被再次打开。此属性设置不要与访问方式冲突。

  LPSECURITY_ATTRIBUTESlpSecurityAttributes,NULL时,句柄不能被继承。

  DWORDdwCreationDisposition, CREATE_ALWAYS:总是创建新的。CREATE_NEW:存在时,失败。OPEN_ALWAYS:不存在时,创建一个新的。OPEN_EXISTING:不存在时,失败。

  DWORDdwFlagsAndAttributes,一般用FILE_ATTRIBUTE_NORMAL就够了。

  HANDLEhTemplateFileNULL

);

对这种打开、操作、关闭三步骤方式的对象,一般都会在打开时指定各种属性,且这些属性仅会保留到关闭前。

创建路径用:CreateDirectoryCreateDirectoryEx

什么是文件一直保留的属性:截图如下。关心的属性:大小、时间。

什么是文件打开后才有的属性:

以下属性作用域:文件打开到关闭。即打开时指定,关闭时消失。

文件指针属性、共享属性、访问属性、创建属性、文件标识和属性、安全属性。前四个比较重要。File pointer是一个可以更改的值,在读写数据时可通过设置其值来改变读写位置。

2WriteFileReadFile

2-1WriteFile

<作用>写数据到文件指针指定的位置。同步异步都行。WriteFileEx仅支持异步操作。

<返回值>成功返回非0,失败返回0

<参数介绍>

BOOL WriteFile(
  HANDLE hFile,GENERIC_WRITE方式访问的句柄。对异步写:是以FILE_FLAG_OVERLAPPED文件标识打开的句柄,或由socket或accept返回的套接字句柄。
  LPCVOID lpBuffer,写数据缓冲区
  DWORD nNumberOfBytesToWrite,要写入的字节大小
  LPDWORD lpNumberOfBytesWritten,[out]已写入多少字节。若lpOverlapped为NULL,则此参数不能为NULL;lpOverlapped非NULL时,此参数才可为NULL。若是overlapped write操作,可通过GetOverlappedResult获得已写入字节。若hFile和I/O completion port关联,通过GetQueuedCompletionStatus获取已写入字节大小
  LPOVERLAPPED lpOverlapped hFile以FILE_FLAG_OVERLAPPED文件标识打开时才需要此属性。以FILE_FLAG_OVERLAPPED打开的hFile,lpOverlapped必须不为NULL。具体到完成端口再讲。
);

2-2ReadFile

<作用>从文件指针指定位置开始读数据。同步异步都行。ReadFileEx仅用于异步操作。

<返回值>成功返回非0,不成功返回0。若返回值非0,但读到的字节是0,说明读发生时,文件指针在文件结尾。以下任意一种情况发生时,ReadFile才返回:

Ø  管道写入完毕后,会通知你写操作完成。

Ø  请求的字节已读到。

Ø  发生错误。

<参数介绍>

BOOL ReadFile(
  HANDLE hFile,GENERIC_READ方式访问的句柄。对异步读:是以FILE_FLAG_OVERLAPPED文件标识打开的句柄,或由socket或accept返回的套接字句柄。
  LPVOID lpBuffer,[out]接受数据的buffer
  DWORD nNumberOfBytesToRead,要读的字节大小
  LPDWORD lpNumberOfBytesRead,[out]已读取的字节。Overlapped不讲了。
  LPOVERLAPPED lpOverlapped不讲了。
);

2-3FlushFileBuffers

<作用>将缓存中数据写入文件。

<返回值>成功非0,失败0。句柄是console output时,失败,因控制台输出没有缓存。

<参数介绍>

BOOL FlushFileBuffers(
  HANDLE hFile GENERIC_WRITE方式访问的句柄。
);

对一个不支持缓存的I/O设备,调用CreateFile时应以FILE_FLAG_NO_BUFFERING文件标志打开。

2-4SetFilepointer   /*typedefunsigned long       DWORD;*/

<作用>对已打开的文件,移动其指针。文件指针比LONG大时,使用SetFilePointerEx更简单。

<返回值>①成功且lpDistanceToMoveHighNULL,则返回值是文件指针(DWORD类型)的低位。②lpDistanceToMoveHighNULL,返回值是文件指针的低位,高位存放在lpDistanceToMoveHigh中。③失败且lpDistanceToMoveHighNULL,返回值是INVALID_SET_FILE_POINTER④失败且lpDistanceToMoveHighNULL,返回值是INVALID_SET_FILE_POINTER⑤若新的文件指针是负数,则函数失败,GetLastError返回ERROR_NEGATIVE_SEEK

<参数介绍>

DWORD SetFilePointer(
  HANDLE hFile, GENERIC_READ或GENERIC_WRITE方式访问的句柄。
  LONG lDistanceToMove,[in,out]文件指针要移动的低位长度,有正负号。
  PLONG lpDistanceToMoveHigh, 文件指针距离头或尾的高位长度,32位够用时,此值设为NULL。
  DWORD dwMoveMethod文件指针的起始位置:FILE_BEGIN、FILE_CURRENT或FILE_END。
);

2-5SetEndOfFile

<作用>移动文件的结尾位置到当前文件指针所在位置。可以通过此函数来截断或扩展设置文件大小。若增大文件,则旧的EOF position和新的结束位置之间的内容未定义。这个是设置文件的物理结束位置,设置逻辑结束位置,使用SetFileValidData

<返回值>成功非0,失败0

<参数介绍>

BOOL SetEndOfFile(
  HANDLE hFile GENERIC_WRITE方式访问的文件句柄。
);

3CloseHandle可关闭文件句柄。




from: http://blog.csdn.net/mwj_88/article/details/8494335

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CreateFile之类的几个函数 的相关文章

  • C++扫雷制作(新手上路)

    文章目录 前言 制作软件 代码结构 结构体 刷新屏幕 创建雷区 游戏过程 按钮的制作 总结 前言 在熟读C primer plus 之后 为了进一步熟悉C 编程 制作了一个简易版扫雷 有何不足 有何见地 请大家评论留言 以下是游戏图片 制作
  • vue+elementUI的el-form的回车键登录,监听键盘来触发事件

    vue elementUI的el form的回车键登录 监听键盘来触发事件 1 当只有一个el input的时候 可以用elementUI的自带的回车键触发提交事件 但是有时候会同时触发刷新页面 这样可以在el form上添加 submit
  • [转]Linux存储入门:简易数据恢复方案--分区和LVM实战

    数据恢复有没有简易方案 IT工程师一般都知道如何操作和使用文件和目录 但是 对于系统如何构建出 抽象出文件和目录 一般就不熟悉了 至于更下层的概念 可能大家知道最多的就是驱动了 所以 为了规避这点 可行的简易方案之一 就是以黑箱方式使用te
  • 51. N-Queens

    The n queens puzzle is the problem of placing n queens on an n n chessboard such that no two queens attack each other Gi
  • 数据分析与可视化-R语言分析 (选择练习)

    1 多选题 可以运行R语言的操作系统包括 选项 A Linux B Windows C Mac OS D Android 答案 Linux Windows Mac OS 2 单选题 可以命令将R语言升级到最新版本 选项 A fleshR B
  • vue 的事件修饰符(v-on, v-model)

    先谈谈我对vue 的一些指令的理解吧 v bind 顾名思义是绑定的意思 但是只能绑定属性 语法糖 而 v on 是绑定一个事件 语法糖 v model 是双向数据的绑定 只能用于表单中 而值得一说的v model 相当于是 v bind
  • linux系统数据盘挂载

    前言 挂载前 最好是新的服务器 不要安装宝塔 我之前先安装宝塔 再挂载就有点费劲 需要考虑原来文件是否受损 当前教程属于新服务器下 先挂载数据盘 挂载步骤 查看磁盘信息 gt gt 将数据盘分区 gt gt 格式化数据盘 gt gt 创建一
  • Python怎么输出换行

    python怎样输出换行 Python怎么输出换行 0 摘要 由于特殊的输出要求 我们在使用print 函数时 不希望输出结束后自动换行 1 print 指定结束符 Print hello end Print world result he
  • Linux------网络基础1

    文章目录 计算机网络的发展历程 网络协议 计算机网络分层体系结构 局域网通信的原理 IP地址和 MAC地址的区别 TCP IP体系结构 计算机网络的发展历程 简单的了解一下就行 图就不提供了 1 最开始 计算机之间是相互独立的 不能沟通交流
  • python3.6 安装pyltp

    当时安装pyltp一直报错 缺少balabala 安装了都没有什么暖用 so成功后安利一下 1 安装wheel 下面两个文件针对不同的python版本下载一个即可 pyltp 0 2 1 cp35 cp35m win amd64 whl p
  • 2021年7月,关于技术和未来

    近期研究了一段时间梅花易数 作为一个从小接受唯物主义教育的社会主义接班人 自然曾经一度对这些所谓的封建迷信是不屑一顾的 后来随着年龄增长 才开始慢慢觉得应对这些传承下来的古老文化保持敬畏 然而 直到最近真正仔细研究了后才发现 梅花易数居然有
  • k8s 之 volume sc pv pvc 详解

    数据卷概述 Kubernetes Volume 数据卷 主要解决了如下两方面问题 数据持久性 通常情况下 容器运行起来之后 写入到其文件系统的文件暂时性的 当容器崩溃后 kubelet将会重启该容器 此时原容器运行后写入的文件将丢失 因为容
  • PWM移相

    PWM移相可以从两方面考虑 1 如果能够移动时基 那么移动时基是一种最简便的方法 2 如果没办法移动时基 那么改变比较值也是一种可行的办法 C2000系列DSP的ePWM模块对PWM移相有相关的应用说明 如下图所示 来源于2803x芯片手册
  • Qt实现跨窗口信号槽通信

    多窗口通信 如果是窗口类对象之间互相包含 则可以直接开放public接口调用 不过 很多情况下主窗口和子窗口之间要做到异步消息通信 就必须依赖到跨窗口的信号槽 以下是一个简单的示例 母窗口 mainwindow h ifndef MAINW
  • L1-7 前世档案

    L1 7 前世档案 网络世界中时常会遇到这类滑稽的算命小程序 实现原理很简单 随便设计几个问题 根据玩家对每个问题的回答选择一条判断树中的路径 如下图所示 结论就是路径终点对应的那个结点 现在我们把结论从左到右顺序编号 编号从 1 开始 这
  • 单机 steam_好玩不贵,一个人可以玩很久,steam百元单机游戏推荐

    steam市场上的游戏有琳琅满目 从一块钱到几百块的游戏充斥在市场中 如何在众多游戏中挑选自己喜欢适合的游戏呢 今天就来推荐一下2款百元左右的单机游戏 包你满意 1 缺氧 目前steam售价 本体58元 本体 7DLC Klei survi

随机推荐

  • 线性方程组解的分析:唯一解,无穷多解以及无解

    本文将总结关于线性方程组解的知识点 线性方程组 定义1 线性方程组 我们将形如下式的方程组称为线性方程组 a11x1 a12x2 a1nxn b1a21x1 a22x2 a2nxn b2 am1x1 am2x2 amnxn bm 9 9 a
  • window10配置OpenGL ES3.0

    1 下载书籍源码 地址 GitHub danginsburg opengles3 book OpenGL ES 3 0 Programming Guide Sample Code 2 下载mali opengl es模拟器 下载地址 建议下
  • allegro如何通过dra文件生产psm文件

    1 dra文件是可以用allegro打开的封装文件 但是要想被pcb调用 需要psm文件才可以 想要通过dra生成psm文件很简单
  • @ComponentScan注解进行扫描的几种方式。

    方式一 扫描包 返回是String的数组 所以可是多个包路径 也可是一个包路径 完整写法是 单个 ComponentScan basePackages xxx 多个 ComponentScan basePackages xxx aaa 注意
  • 2020美赛F奖论文(一):摘要、绪论和模型准备

    全文 2020美赛F奖论文 一 摘要 绪论和模型准备 2020美赛F奖论文 二 传球网络模型 PNM 的建立和影响因子分析 2020美赛F奖论文 三 足球团队指标和基于机器学习的球队表现预测 2020美赛F奖论文 四 模拟退火算法驱动的结构
  • 神经网络七:神经网络设置层的数量和尺寸

    本文就现在神经网络中层的数量和尺寸 分析其中的优缺点 在此特声明 本文的内容是来自 CS231n课程笔记翻译 神经网络笔记1 下 智能单元 知乎专栏 因本人有时会查阅这些相关的知识点 一直翻文档比较麻烦 特从文档中摘录复制写到博客中 其中的
  • Mac M1系统 miniconda安装、配置conda环境,及在conda环境中安装激活QIIME2

    Mac M1系统 miniconda安装 配置conda环境 及在conda环境中安装激活QIIME2 1 适配版本的miniconda软件安装包下载 windows MAC LINUX Miniconda Conda documentat
  • JavaScript——将json数组填充进excel表并下载保存

    今天遇到的一个问题就是 获取到猫眼电影票房总榜的数据后 怎么把他们填充进excel中 本文参考了另一篇博客 地址如下 https blog csdn net qq 34623560 article details 79928248 本文对其
  • flowable(九) 通过ui部署流程图

    下载xml模型 登陆到flowable modeler后台 上传部署 登陆flowable admin地址 ok
  • React基础(肆)———状态和循环渲染

    一 状态 什么是状态 import React Component from react export default class App extends Component state mytext 收藏 myShow true rend
  • 问题 C: 括号匹配

    题目描述 给你一个字符串 里面只包含 四种符号 请问你需要至少添加多少个括号才能使这些括号匹配起来 如 是匹配的 是匹配的 是不匹配的 是不匹配的 输入 第一行输入一个正整数N 表示测试数据组数 N lt 10 每组测试数据都只有一行 是一
  • 调试最长的一帧(第14天)

    看看流程 可见分页数据库的更新也是和场景的筛选绘制是同时进行的 再看看大图 第14天要进行左下角的 依照惯例 跟过去 现在开始步入正轨 发现第0个fileName为空 这是有问题的 创建pagelod时修正为 这次进来了 在这里删除 放入r
  • HTML5+CSS3D酷炫相册

    HTML5 CSS3D酷炫相册 图片预览 目录结构 源码 HTML
  • 2:数据结构复习线性表(一般集合的并集:链式解决方案)

    线性表的合并 例2 1 求解一般集合的并集问题 问题描述 已知两个集合A和B 现要求一个新的集合A AUB 例如 设 A 7 5 3 11 B 2 6 3 合并后 A 7 5 3 11 2 6 问题分析 可以利用两个线性表LA和LB分别表示
  • 数组最大连续子序列和

    题目 给定一个数组 其中元素可正可负 求其中最大连续子序列的和 这题是一道非常经典的面试题 会经常出现在各种面试中 具体有好几种不同时间复杂度的解法 那么最好的方法是用动态规划方法来求解 第一种 时间复杂度为O n 3 暴力法求解 三层循环
  • events.js:183 throw er; // Unhandled 'error' event 相关问题解决办法

    在启动项目的时候可能会出现以下问题 出现原因 出现这个问题的主要原因是因为端口被占用了 解决办法 查询端口号是否被占用 netstat aon findstr 8000 找到对应程序 tasklist findstr 9060 再任务管理器
  • 2015款Mac笔记本安装Windows10系统到外置移动硬盘教程

    终于把2015年的15寸Macbook Pro笔记本安装上了Windows10操作系统 并且是在外置的移动硬盘上安装的 运行的效果和用户体验也是非常棒 之前网上购买了加密的视频 但是这个视频必须是windows系统 还不能是虚拟机里面的系统
  • QT关键问题解决之paintevent理解

    基础概念 paintEvent QPaintEvent 函数是QWidget类中的虚函数 用于ui的绘制 会在多种情况下被其他函数自动调用 比如update 时 运行时机 一个重绘事件用来重绘一个部件的全部或者部分区域 下面几个原因的任意一
  • 中移动 NB-IoT (M5310-A)学习笔记

    一 来自 M5310 A硬件设计手册V1 5 DCE Data Communication EquipmentDTE Data Terminal Equipment 模块的三种工作模式 模式 描述 Active 模块处于活动状态 所有功能正
  • CreateFile之类的几个函数

    这几天看windows API一日一练 博主给画出了道道 我来填填具体点的内容 需求 想操作文件 串口 并口 USB等等 原理层 其实很简单 就三步 打开 操作 然后关闭 实践层1 打开用CreateFile 读写操作用WriteFile