setFileApisToOEM 函数 (fileapi.h)

使进程的文件 I/O 函数使用 OEM 字符集代码页。 此函数适用于 8 位控制台输入和输出操作。

语法

void SetFileApisToOEM();

返回值

备注

其代码页由 SetFileApisToOEM 设置的文件 I/O 函数是由接受或返回文件名的 KERNEL32.DLL 导出的函数。 SetFileApisToOEM 设置每个进程的代码页,而不是每个线程或每台计算机。

SetFileApisToOEM 函数由 SetFileApisToANSI 函数补充,这会导致同一组文件 I/O 函数使用 ANSI 字符集代码页。

默认情况下,8 位控制台函数使用 OEM 代码页。 默认情况下,所有其他函数都使用 ANSI 代码页。 这意味着其他函数可能无法正确处理控制台函数返回的字符串,反之亦然。 例如,如果 FindFirstFileA 函数返回包含某些扩展 ANSI 字符的字符串,并且 8 位控制台函数设置为使用 OEM 代码页,则 WriteConsoleA 函数将无法正确显示该字符串。

使用 AreFileApisANSI 函数确定文件 I/O 函数集当前使用的代码页。 使用 SetConsoleCPSetConsoleOutputCP 函数设置 8 位控制台函数的代码页。

若要解决代码页不兼容的问题,最好将 Unicode 用于控制台应用程序。 使用 Unicode 的控制台应用程序比使用 8 位控制台函数的控制台应用程序多用途得多。 除该解决方案外,控制台应用程序可以调用 SetFileApisToOEM 函数,使文件 I/O 函数集使用 OEM 字符集字符串,而不是 ANSI 字符集字符串。 使用 SetFileApisToANSI 函数将这些函数设置回 ANSI 代码页。

处理命令行时,控制台应用程序应获取 Unicode 格式的命令行,然后使用相关的字符到 OEM 函数将其转换为 OEM 窗体。 另请注意,在本例中,命令行main函数的 argv 参数中的数组包含 ANSI 字符集字符串。

在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。

技术 支持
服务器消息块 (SMB) 3.0 协议
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CSV)
弹性文件系统 (ReFS)

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 fileapi.h (包括 Windows.h、WinBase.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

AreFileApisANSI

文件管理函数

FindFirstFileA

SetConsoleCP

SetConsoleOutputCP

SetFileApisToANSI

WriteConsoleA