mmioOpenW 函数 (mmiscapi.h)

mmioOpen 函数打开一个用于无缓冲或缓冲 I/O 的文件;创建文件;删除文件;或检查文件是否存在。 该文件可以是标准文件、内存文件或自定义存储系统的元素。 mmioOpen 返回的句柄不是标准文件句柄;请勿将其与多媒体文件 I/O 函数以外的任何文件 I/O 函数一起使用。

注意 此函数已弃用。 应用程序应调用 CreateFile 来创建或打开文件。
 

语法

HMMIO mmioOpenW(
  LPWSTR     pszFileName,
  LPMMIOINFO pmmioinfo,
  DWORD      fdwOpen
);

参数

pszFileName

指向包含文件名称的缓冲区的指针。 如果未指定 I/O 过程来打开文件,文件名将确定文件打开方式,如下所示:

  • 如果文件名不包含加号(+),则假定它是标准文件的名称(即类型不 HMMIO)。
  • 如果文件名为 FORM EXAMPLE。EXT+ABC,假定扩展 EXT 标识一个已安装的 I/O 过程,该过程被调用以对文件执行 I/O。 有关详细信息,请参阅 mmioInstallIOProc
  • 如果文件名 NULL 且未提供 I/O 过程,则假定 MMIOINFO 结构 成员 adwInfo 结构是当前打开的文件的标准(非HMMIO) 文件句柄。
文件名不应超过 128 个字符,包括终止 NULL 字符。

打开内存文件时,将 szFilename 设置为 NULL

pmmioinfo

指向 MMIOINFO 结构的指针,该结构包含 mmioOpen使用的额外参数。 除非打开内存文件、指定缓冲 I/O 的缓冲区大小或指定已卸载的 I/O 过程以打开文件,否则此参数应 NULL。 如果此参数未 NULL,则必须将其引用 MMIOINFO 的所有未使用成员 结构设置为零,包括保留成员。

fdwOpen

打开操作的标志。 MMIO_READ、MMIO_WRITE和MMIO_READWRITE标志是互斥的,只应指定一个标志。 MMIO_COMPAT、MMIO_EXCLUSIVE、MMIO_DENYWRITE、MMIO_DENYREAD和MMIO_DENYNONE标志是文件共享标志。 定义了以下值。

价值 意义
MMIO_ALLOCBUF 打开用于缓冲 I/O 的文件。 若要分配大于或小于默认缓冲区大小(定义为 MMIO_DEFAULTBUFFER 的 8K)的缓冲区,请将 MMIOINFO 结构的 cchBuffer 成员设置为所需的缓冲区大小。 如果 cchBuffer 为零,则使用默认缓冲区大小。 如果提供自己的 I/O 缓冲区,则不应使用此标志。
MMIO_COMPAT 使用兼容模式打开文件,允许给定计算机上的任何进程多次打开该文件。 如果文件已使用任何其他共享模式打开,mmioOpen 失败。
MMIO_CREATE 创建新文件。 如果文件已存在,则会将其截断为零长度。 对于内存文件,此标志指示文件末尾最初位于缓冲区的开头。
MMIO_DELETE 删除文件。 如果指定了此标志,则 szFilename 不应 NULL。 如果成功删除文件或 FALSE,则返回值 TRUE(强制转换为 HMMIO)。 不要为已删除的文件调用 mmioClose 函数。 如果指定了此标志,将忽略打开文件的其他所有标志。
MMIO_DENYNONE 打开该文件,而不拒绝对文件进行读取或写入访问的其他进程。 如果文件已由任何其他进程以兼容模式打开,mmioOpen 失败。
MMIO_DENYREAD 打开该文件并拒绝对文件进行读取访问的其他进程。 如果文件已在兼容模式下打开,或者要由任何其他进程进行读取访问,mmioOpen 将失败。
MMIO_DENYWRITE 打开该文件并拒绝其他进程对该文件的写入访问权限。 如果文件已在兼容模式下打开,或者任何其他进程进行写入访问,mmioOpen 将失败。
MMIO_EXCLUSIVE 打开该文件并拒绝对文件进行读取和写入访问的其他进程。 如果文件已以任何其他模式打开进行读取或写入访问,即使当前进程也是如此,mmioOpen 失败。
MMIO_EXIST 确定指定的文件是否存在并从 szFilename中指定的路径创建完全限定的文件名。 如果限定成功且文件存在或 FALSE,则返回值 TRUE(强制转换为 HMMIO)。 该文件未打开,并且该函数不返回有效的多媒体文件 I/O 文件句柄,因此请勿尝试关闭该文件。
注意, 应用程序应改为 GetFileAttributesGetFileAttributesEx 调用。
 
MMIO_GETTEMP 使用 szFilename 中传递的参数(可选)创建临时文件名。 例如,可以指定“C:F”以创建驻留在驱动器 C 上的临时文件,以字母“F”开头。 生成的文件名将复制到 szFilename指向的缓冲区。 缓冲区必须足够大,才能容纳至少 128 个字符。

如果临时文件名已成功创建,则返回值 MMSYSERR_NOERROR(强制转换为 HMMIO)。 否则,返回值 MMIOERR_FILENOTFOUND。 该文件未打开,并且该函数不返回有效的多媒体文件 I/O 文件句柄,因此请勿尝试关闭该文件。 此标志替代所有其他标志。

注意 应用程序应改为 GetTempFileName 调用。
 
MMIO_PARSE szFilename中指定的路径创建完全限定的文件名。 完全限定的名称将复制到 szFilename指向的缓冲区。 缓冲区必须足够大,才能容纳至少 128 个字符。

如果函数成功,则返回值 TRUE(强制转换为 HMMIO)。 否则,返回值 FALSE。 该文件未打开,并且该函数不返回有效的多媒体文件 I/O 文件句柄,因此请勿尝试关闭该文件。 如果指定了此标志,则忽略打开文件的所有标志。

注意 应用程序应改为调用 getFullPathName
 
MMIO_READ 打开文件以仅读取。 如果未指定MMIO_WRITE和MMIO_READWRITE,则这是默认值。
MMIO_READWRITE 打开用于读取和写入的文件。
MMIO_WRITE 打开文件以仅写入。

返回值

没有

言论

如果 lpmmioinfo 指向 MMIOINFO 结构,请初始化结构的成员,如下所示。 所有未使用的成员都必须设置为零,包括保留成员。

  • 若要请求使用已安装的 I/O 过程打开文件,请将 fccIOProc 设置为 I/O 过程的四个字符代码,并将 pIOProc 设置为 NULL
  • 若要请求使用卸载的 I/O 过程打开文件,请将 IOProc 设置为指向 I/O 过程,并将 fccIOProc 设置为 NULL
  • 若要请求 mmioOpen 确定用于根据 szFilename中包含的文件名打开文件的 I/O 过程,请将 fccIOProcpIOProc 设置为 NULL。 如果未指定任何 MMIOINFO 结构,则这是默认行为。
  • 若要使用内部分配和管理的缓冲区打开内存文件,请将 pchBuffer 设置为 NULLfccIOProc 设置为 FOURCC_MEM,cchBuffer 到缓冲区的初始大小,并将 adwInfo 设置为缓冲区的增量扩展大小。 如有必要,此内存文件将自动扩展 adwInfo 中指定的字节数。 指定 dwOpenFlags 参数的MMIO_CREATE标志,以最初将文件的末尾设置为缓冲区的开头。
  • 若要使用应用程序提供的缓冲区打开内存文件,请将 pchBuffer 设置为指向内存缓冲区,fccIOProc FOURCC_MEM,将 cchBuffer 设置为缓冲区的大小,并将 adwInfo 为缓冲区的增量扩展大小。 仅当 pchBuffer 是通过 调用 globalAllocGlobalLock 函数获取的指针时,adwInfo 中的扩展大小应为非零;在这种情况下,将调用 GlobalReAlloc 函数以展开缓冲区。 换句话说,如果 pchBuffer 指向本地或全局数组或本地堆中的内存块,adwInfo 必须为零。 指定 dwOpenFlags 参数的MMIO_CREATE标志,以最初将文件的末尾设置为缓冲区的开头。 否则,整个内存块被视为可读。
  • 若要使用当前打开的标准文件句柄(即没有 HMMIO 类型的文件句柄),请将 fccIOProc 设置为 FOURCC_DOS,pchBuffer 设置为 NULL并将 adwInfo 设置为标准文件句柄。 文件中的偏移量将相对于文件的开头,并且与调用 mmioOpen 时标准文件中的位置无关;调用 mmioOpen 时,初始多媒体文件 I/O 偏移量将与标准文件中的偏移量相同。 若要关闭多媒体文件 I/O 文件句柄而不关闭标准文件句柄,请将MMIO_FHOPEN标志传递给 mmioClose
必须使用 mmioOpen调用 mmioClose 以关闭打开的文件。 当应用程序退出时,打开的文件不会自动关闭。

注意

mmiscapi.h 标头将 mmioOpen 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 mmiscapi.h (包括 Mmiscapi.h、Windows.h)
Winmm.lib
DLL Winmm.dll