【C语言】CreateFile函数用法介绍
- 互联网
- 2025-08-25 17:03:01

目录
一、函数原型与基本功能
二、参数详解
1. lpFileName(文件路径)
2. dwDesiredAccess(访问权限)
补充说明
5. dwCreationDisposition(创建策略)
6. dwFlagsAndAttributes(属性标记)
7. hTemplateFile(模板文件句柄)
三、返回值与错误处理
四、使用场景示例
场景1:创建新文本文件
场景2:异步读取串口数据
五、扩展注意事项
CreateFile函数是Windows API中用于文件/设备操作的核心接口,支持创建、打开文件及多种I/O设备(如串口、管道、磁盘等)。本文将详细介绍。
一、函数原型与基本功能 HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );该函数返回对象的操作句柄,失败时返回INVALID_HANDLE_VALUE(需用GetLastError()获取错误码)。
二、参数详解 1. lpFileName(文件路径) 作用:指定操作对象的名称(文件、设备、命名管道等)特性: 支持绝对/相对路径,可用/或\分隔符最大长度限制为MAX_PATH(260字符),Unicode版本可突破此限制特殊设备名如COM1(串口)、LPT1(并口)需遵循MS-DOS设备命名规则 2. dwDesiredAccess(访问权限)以下是 CreateFile 函数中 dwDesiredAccess 参数的可能值、用途、适用场景及组合使用的详细表格总结:
参数值用途适用场景组合使用示例0仅允许查询元数据(如属性、大小),不进行实际读写操作获取文件信息(GetFileSize、GetFileTime)时无需读写权限单独使用GENERIC_READ允许读取文件或设备数据,支持移动文件指针读取文件内容(ReadFile)、查看日志、复制文件GENERIC_READ | GENERIC_WRITE(读写权限组合)GENERIC_WRITE允许写入数据,支持移动文件指针或调整文件大小写入文件(WriteFile)、修改设备配置(如串口通信)GENERIC_READ | GENERIC_WRITE(常见组合)、GENERIC_WRITE | GENERIC_ALLGENERIC_EXECUTE保留值,通常用于可执行文件或驱动程序的执行权限(需设备支持)注册表操作、可执行文件加载(实际文件操作中较少使用)通常单独使用,需参考具体设备文档GENERIC_ALL授予完全控制权限(读、写、执行、删除),需配合安全描述符使用管理员操作(修改系统文件、磁盘格式化)单独使用或与 0 组合(查询元数据 + 完全控制)
补充说明 权限冲突:若请求的访问权限与 dwShareMode 参数指定的共享模式冲突,函数将返回 ERROR_SHARING_VIOLATION。设备兼容性:如串口设备通常需同时指定 GENERIC_READ \| GENERIC_WRITE 以支持双向通信。特殊权限要求:GENERIC_ALL 需管理员权限或安全描述符支持,否则可能失败。 3. dwShareMode(共享模式)
控制其他进程的并发访问权限:
值说明FILE_SHARE_READ允许其他进程读取FILE_SHARE_WRITE允许其他进程写入FILE_SHARE_DELETE允许其他进程删除或重命名(需NTFS支持)30独占模式,阻止其他进程访问4. lpSecurityAttributes(安全属性)
结构体:
typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; LPVOID lpSecurityDescriptor; BOOL bInheritHandle; } SECURITY_ATTRIBUTES;作用:
bInheritHandle:控制句柄是否被子进程继承lpSecurityDescriptor:设置NTFS权限(需管理员权限) 5. dwCreationDisposition(创建策略)决定文件存在与否时的处理方式:
值行为CREATE_NEW新建文件,若存在则失败CREATE_ALWAYS覆盖已有文件(清空属性)OPEN_EXISTING打开已存在文件(不存在则失败)OPEN_ALWAYS文件存在时打开,否则创建TRUNCATE_EXISTING截断已有文件(需GENERIC_WRITE权限) 6. dwFlagsAndAttributes(属性标记)包含文件属性与操作标志的位组合:
常见文件属性: 属性说明FILE_ATTRIBUTE_HIDDEN隐藏文件FILE_ATTRIBUTE_READONLY只读文件FILE_ATTRIBUTE_TEMPORARY临时文件(优先内存缓存)1 操作标志: 标志说明FILE_FLAG_OVERLAPPED启用异步I/O操作FILE_FLAG_DELETE_ON_CLOSE关闭后自动删除 7. hTemplateFile(模板文件句柄) 作用:复制已有文件的扩展属性(如创建时间、压缩标志)限制:仅当dwCreationDisposition为CREATE_NEW或OPEN_ALWAYS时生效8 三、返回值与错误处理 成功时:返回有效的句柄(需用CloseHandle()关闭)失败时:返回INVALID_HANDLE_VALUE(值为-1) 典型错误码: 错误码说明ERROR_FILE_NOT_FOUND文件不存在且未指定创建策略ERROR_ACCESS_DENIED权限不足或文件被占用ERROR_SHARING_VIOLATION共享模式与其他进程冲突3 四、使用场景示例 场景1:创建新文本文件 HANDLE hFile = CreateFile( L"example.txt", // 文件名 GENERIC_WRITE, // 写权限 0, // 独占模式 NULL, // 默认安全属性 CREATE_ALWAYS, // 覆盖创建 FILE_ATTRIBUTE_NORMAL, // 普通文件 NULL ); 场景2:异步读取串口数据 HANDLE hCom = CreateFile( L"COM1", // 串口设备 GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, // 异步模式 NULL ); 五、扩展注意事项 句柄泄漏:必须通过CloseHandle()释放资源,否则导致系统资源耗尽路径规范化:建议使用\\?\前缀绕过MAX_PATH限制(仅Unicode版本)事务操作:需使用CreateFileTransacted()实现原子文件操作3设备兼容性:部分标志(如FILE_FLAG_NO_BUFFERING)对物理磁盘有特殊要求(完整参数列表及系统级限制可参考Microsoft官方文档)
【C语言】CreateFile函数用法介绍由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【C语言】CreateFile函数用法介绍”
上一篇
uniapp多端适配
下一篇
Qt--源码