这是一个多功能的函数,可打开或创建文件或者I/O设备,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。
HANDLE CreateFile(LPCTSTR lpFileName, //普通文件名或者设备文件名
DWORD dwDesiredAccess, //访问模式(写/读)
DWORD dwShareMode, //共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
DWORD dwCreationDisposition, //如何创建
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hTemplateFile //用于复制文件句柄
);
参数 | 类型及说明 | |
1. lpFileName | String ,要打开的文件的名字。 如果 lpFileName 的对象是一个路径,则有一个最大字符数的限制。不能超过常量 (MAX_PATH). 这个限制指示了 | |
2. dwDesiredAccess | Long , 指定对象的访问方式 , 程序可以获得读访问权 , 写访问权 , 读写访问权或者是询问设备 ("device query") 访问权 . Value( 值 ) GENERIC_READ GENERIC_WRITE | |
3. dwShareMode | Long ,设置位标志指明对象如休共享 。 如果参数是 0, 对象不能够共享。后续的打开对象的操作将会失败 , 直到该对象的句柄关闭 。 FILE_SHARE_DELETE FILE_SHARE_READ FILE_SHARE_WRITE | |
4. lpSecurityAttributes | SECURITY_ATTRIBUTES , 指向一个 SECURITY_ATTRIBUTES 结构的指针,定义了文件的安全特性(如果操作系统支持的话) 如果这个参数是 NULL,则该句柄不可继承 . | |
5. dwCreationDisposition | Long ,下述常数之一: | |
CREATE_NEW | 创建文件;如文件存在则会出错 | |
CREATE_ALWAYS | 创建一个新文件 . 如果该文件已经存在 , 函数将覆盖已存在的文件并清除已存在的文件属性 | |
OPEN_EXISTING | 打开一个文件 , 如果文件不存在函数将会失败 .(文件必须已经存在。) | |
OPEN_ALWAYS | 如果文件存在 , 打开文件 。如果文件不存在 , 并且参数中有 CREATE_NEW 标志 , 则创建文件 . | |
TRUNCATE_EXISTING | 打开一个文件 , 每次打开 , 文件将被截至 0 字节。调用进程必须用 GENERIC_WRITE 访问模式打开文件 。如果文件不存在则函数就会失败 . | |
6. dwFlagsAndAttributes | Long ,一个或多个下述常数 | |
FILE_ATTRIBUTE_ARCHIVE | 文件将被存档 , 程序使用此属性来标志文件去备份或移除 | |
FILE_ATTRIBUTE_COMPRESSED | 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式 | |
FILE_ATTRIBUTE_NORMAL | 默认属性(文件没有被设置任何属性 .) | |
FILE_ATTRIBUTE_HIDDEN | 隐藏文件或目录。文件被隐藏 , 它不会在一般文件夹列表中被装载 . | |
FILE_ATTRIBUTE_READONLY | 文件为只读。程序可以读文件 , 但不可以在上面写入内容 , 也不可删除 . | |
FILE_ATTRIBUTE_SYSTEM | 文件为系统文件。文件是系统的一部分 , 或是系统专用的 . | |
FILE_FLAG_WRITE_THROUGH | 操作系统不得推迟对文件的写操作。指示系统通过快速缓存直接写入磁盘 | |
FILE_FLAG_OVERLAPPED | 允许对文件进行重叠操作。 指示系统初始化对象 , 此操作将对进程设置一个引用计数并返回 ERROR_IO_PENDING。处理完成后 , 指定对象将被设置为信号状态。 当 FILE_FLAG_OVERLAPPED 被指定 , 程序必须执行重叠参数 ( 指向 OVERLAPPED结构 ) 去进行文件的读写 . | |
FILE_FLAG_NO_BUFFERING | 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块。 指示系统不使用快速缓冲区或缓存,当和 FILE_FLAG_OVERLAPPED 组合 , 该标志给出最 大的异步操作量 , 因为 I/O 不依赖内存管理器的异步操作 . 然而 , 一些 I/O 操作将会运行得长一些 , 因为数据没有控制在缓存中 . 1.文件的存取开头的字节偏移量必须是扇区尺寸的整倍数 ; | |
FILE_FLAG_RANDOM_ACCESS | 针对随机访问对文件缓冲进行优化。指定文件是随机访问 , 这个标志可以使系统优化文件的缓冲 | |
FILE_FLAG_SEQUENTIAL_SCAN | 针对连续访问对文件缓冲进行优化。 指定文件将从头到尾连续地访问 . 这个标志可以提示系统优化文件缓冲 . 如果程序在随机访问文件中移动文件指针 , 优化可能不会发生 ; 然而 , 正确的操作仍然可以得到保证 。 | |
FILE_FLAG_DELETE_ON_CLOSE | 关闭了上一次打开的句柄后,将文件删除。特别适合临时文件 | |
FILE_FLAG_POSIX_SEMANTICS | 指明文件符合 POSIX 标准 . 这是在 MS-DOS 与 16 位 Windows 下的标准 . | |
FILE_FLAG_OPEN_REPARSE_POINT | 指定这个标志制约 NTFS 分区指针 . 该标志不能够和 CREAT_ALWAYS 一起使用 . | |
FILE_FLAG_OPEN_NO_RECALL | 指明需要文件数据 , 但是将继续从远程存储器中接收 . 它不会将数据存放在本地存储器中。这个标志由远程存储系统或等级存储管理器系统使用 . | |
也可在 Windows NT 下组合使用下述常数标记: | ||
SECURITY_ANONYMOUS , SECURITY_IDENTIFICATION , SECURITY_IMPERSONATION , SECURITY_DELEGATION , SECURITY_CONTEXT_TRACKING ,SECURITY_EFFECTIVE_ONLY | ||
7. hTemplateFile | Long , 如果不为NULL,则指定一个文件句柄。新文件将从这个文件中复制扩展属性。 为 GENERIC_READ 访问的模式指定一个句柄到模板文件 . 模板文件在文件开始创建后提供文件属性和扩展属性 . |
返回值:
如果函数成功 , 返回一个打开的指定文件的句柄 .
如果指定文件在函数调用前已经存在并且参数5 dwCreationDisposition 是 CREATE_ALWAYS 或者 OPEN_ALWAYS, 调用 GetLastError 就会返回 ERROR_ALREADY_EXISTS( 表示函数成功 ).
如果函数文件在调用前不存在则会返回 0.
如果函数失败 , 返会值会是 INVALID_HANDLE_VALUE. 更多的错误信息可以调用 GetLastError 来获得 .