OpenFile 函数 (winbase.h)

创建、打开、重新打开或删除文件。

注意 此函数的功能有限,不建议使用。 对于新应用程序开发,请使用 CreateFile 函数。
 

语法

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_CANCEL
0x00000800
已忽略。

若要生成包含 “取消 ”按钮的对话框,请使用 OF_PROMPT

OF_CREATE
0x00001000
创建新文件。

如果文件存在,则将其截断为零, (0) 长度。

OF_DELETE
0x00000200
删除文件。
OF_EXIST
0x00004000
打开一个文件,然后将其关闭。

使用它来测试文件是否存在。

OF_PARSE
0x00000100
填充 OFSTRUCT 结构,但不执行任何其他操作。
OF_PROMPT
0x00002000
如果请求的文件不存在,则显示一个对话框。

对话框通知用户系统找不到文件,其中包含 “重试” 和“ 取消 ”按钮。 “ 取消 ”按钮指示 OpenFile 返回找不到文件的错误消息。

OF_READ
0x00000000
打开文件以供只读。
OF_READWRITE
0x00000002
使用读/写权限打开文件。
OF_REOPEN
0x00008000
使用重新打开缓冲区中的信息打开文件。
OF_SHARE_COMPAT
0x00000000
对于基于 MS-DOS 的文件系统,使用兼容模式打开文件,允许指定计算机上的任何进程打开文件任意次数。

使用其他共享模式打开文件的其他工作失败。 此标志映射到 CreateFile 函数|FILE_SHARE_READ FILE_SHARE_WRITE标志。

OF_SHARE_DENY_NONE
0x00000040
在不拒绝对其他进程的读取或写入访问权限的情况下打开文件。

在基于 MS-DOS 的文件系统上,如果该文件已被任何其他进程以兼容模式打开,则函数将失败。

此标志映射到 CreateFile 函数|FILE_SHARE_READ FILE_SHARE_WRITE标志。

OF_SHARE_DENY_READ
0x00000030
打开文件并拒绝对其他进程的读取访问权限。

在基于 MS-DOS 的文件系统上,如果文件已在兼容模式下打开,或者由任何其他进程进行读取访问,则函数将失败。

此标志映射到 CreateFile 函数的 FILE_SHARE_WRITE 标志。

OF_SHARE_DENY_WRITE
0x00000020
打开文件并拒绝对其他进程的写入访问权限。

在基于 MS-DOS 的文件系统上,如果某个文件已在兼容模式下打开,或者由任何其他进程进行写入访问,则函数将失败。

此标志映射到 CreateFile 函数的 FILE_SHARE_READ 标志。

OF_SHARE_EXCLUSIVE
0x00000010
使用独占模式打开文件,并拒绝对其他进程的读/写访问。 如果文件已以任何其他模式打开进行读/写访问,即使当前进程也是如此,则函数会失败。
OF_VERIFY
验证文件的日期和时间是否与之前打开的时间相同。

这对于只读文件的额外检查非常有用。

OF_WRITE
0x00000001
只是为了进行写入访问而打开文件。

返回值

如果函数成功,则返回值指定执行文件 I/O 时要使用的文件句柄。 若要关闭文件,请使用此句柄调用 CloseHandle 函数。

如果函数失败,则返回值 HFILE_ERROR。 要获得更多的错误信息,请调用 GetLastError。

注解

如果 lpFileName 参数仅指定文件名和扩展名,则此函数在以下目录中搜索匹配的文件并按显示的顺序:

  1. 加载应用程序的目录。
  2. 当前目录。
  3. Windows 系统目录。

    使用 GetSystemDirectory 函数获取此目录的路径。

  4. 16 位 Windows 系统目录。

    没有用于检索此目录路径的函数,但会对其进行搜索。

  5. Windows 目录。

    使用 GetWindowsDirectory 函数获取此目录的路径。

  6. PATH 环境变量中列出的目录。
lpFileName 参数不能包含通配符。

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

另请参阅

CreateFile

文件管理函数

GetSystemDirectory

GetWindowsDirectory

OFSTRUCT

SearchPath