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 函数集当前使用的代码页。 使用 SetConsoleCP 和 SetConsoleOutputCP 函数设置 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 |