OpenFile 函数 (winbase.h)
创建、打开、重新打开或删除文件。
语法
HFILE OpenFile(
[in] LPCSTR lpFileName,
[out] LPOFSTRUCT lpReOpenBuff,
[in] UINT uStyle
);
参数
[in] lpFileName
文件的名称。
字符串必须由 8 位 Windows 字符集中的字符组成。 OpenFile 函数不支持 Unicode 文件名或打开命名管道。
[out] lpReOpenBuff
指向 OFSTRUCT 结构的指针,该结构在首次打开文件时接收有关该文件的信息。
结构可用于后续调用 OpenFile 函数以查看打开的文件。
OFSTRUCT 结构包含一个长度限制为 OFS_MAXPATHNAME 个字符的路径字符串成员,长度为 128 个字符。 因此,不能使用 OpenFile 函数打开路径长度超过 128 个字符的文件。 CreateFile 函数没有此路径长度限制。
[in] uStyle
要执行的操作。
此参数可使用以下一个或多个值。
值 | 含义 |
---|---|
|
已忽略。
若要生成包含 “取消 ”按钮的对话框,请使用 OF_PROMPT。 |
|
创建新文件。
如果文件存在,则将其截断为零, (0) 长度。 |
|
删除文件。 |
|
打开一个文件,然后将其关闭。
使用它来测试文件是否存在。 |
|
填充 OFSTRUCT 结构,但不执行任何其他操作。 |
|
如果请求的文件不存在,则显示一个对话框。
对话框通知用户系统找不到文件,其中包含 “重试” 和“ 取消 ”按钮。 “ 取消 ”按钮指示 OpenFile 返回找不到文件的错误消息。 |
|
打开文件以供只读。 |
|
使用读/写权限打开文件。 |
|
使用重新打开缓冲区中的信息打开文件。 |
|
对于基于 MS-DOS 的文件系统,使用兼容模式打开文件,允许指定计算机上的任何进程打开文件任意次数。
使用其他共享模式打开文件的其他工作失败。 此标志映射到 CreateFile 函数的|FILE_SHARE_READ FILE_SHARE_WRITE标志。 |
|
在不拒绝对其他进程的读取或写入访问权限的情况下打开文件。
在基于 MS-DOS 的文件系统上,如果该文件已被任何其他进程以兼容模式打开,则函数将失败。 此标志映射到 CreateFile 函数的|FILE_SHARE_READ FILE_SHARE_WRITE标志。 |
|
打开文件并拒绝对其他进程的读取访问权限。
在基于 MS-DOS 的文件系统上,如果文件已在兼容模式下打开,或者由任何其他进程进行读取访问,则函数将失败。 此标志映射到 CreateFile 函数的 FILE_SHARE_WRITE 标志。 |
|
打开文件并拒绝对其他进程的写入访问权限。
在基于 MS-DOS 的文件系统上,如果某个文件已在兼容模式下打开,或者由任何其他进程进行写入访问,则函数将失败。 此标志映射到 CreateFile 函数的 FILE_SHARE_READ 标志。 |
|
使用独占模式打开文件,并拒绝对其他进程的读/写访问。 如果文件已以任何其他模式打开进行读/写访问,即使当前进程也是如此,则函数会失败。 |
|
验证文件的日期和时间是否与之前打开的时间相同。
这对于只读文件的额外检查非常有用。 |
|
只是为了进行写入访问而打开文件。 |
返回值
如果函数成功,则返回值指定执行文件 I/O 时要使用的文件句柄。 若要关闭文件,请使用此句柄调用 CloseHandle 函数。
如果函数失败,则返回值 HFILE_ERROR。 要获得更多的错误信息,请调用 GetLastError。
注解
如果 lpFileName 参数仅指定文件名和扩展名,则此函数在以下目录中搜索匹配的文件并按显示的顺序:
- 加载应用程序的目录。
- 当前目录。
-
Windows 系统目录。
使用 GetSystemDirectory 函数获取此目录的路径。
-
16 位 Windows 系统目录。
没有用于检索此目录路径的函数,但会对其进行搜索。
-
Windows 目录。
使用 GetWindowsDirectory 函数获取此目录的路径。
- PATH 环境变量中列出的目录。
OpenFile 函数不支持 16 位 Windows OpenFile 函数支持的OF_SEARCH标志。 即使文件名包含完整路径, OF_SEARCH 标志也会指示系统搜索匹配的文件。 使用 SearchPath 函数搜索文件。
如果 uStyle 参数的值为OF_DELETE访问标志或带有任何其他访问标志,并且未使用共享FILE_SHARE_DELETE打开远程文件或目录,则会发生共享冲突。 若要避免在此方案中发生共享冲突,请仅使用 OF_DELETE 访问权限打开远程文件或目录,或者调用 DeleteFile 而不先打开文件或目录进行删除。
在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 是 |
SMB 3.0 透明故障转移 (TFO) | 是 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 是 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 是 |
CsvF 将对压缩文件执行重定向 IO。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |