某些 Unicode 字符(如 )的代码点占用超过 2 个字节。如何使用CreateFile()
这些字符的 Win32 API 函数?
WinBase.h
WINBASEAPI
__out
HANDLE
WINAPI
CreateFileA(
__in LPCSTR lpFileName,
__in DWORD dwDesiredAccess,
__in DWORD dwShareMode,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
__in DWORD dwCreationDisposition,
__in DWORD dwFlagsAndAttributes,
__in_opt HANDLE hTemplateFile
);
WINBASEAPI
__out
HANDLE
WINAPI
CreateFileW(
__in LPCWSTR lpFileName,
__in DWORD dwDesiredAccess,
__in DWORD dwShareMode,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
__in DWORD dwCreationDisposition,
__in DWORD dwFlagsAndAttributes,
__in_opt HANDLE hTemplateFile
);
#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif // !UNICODE
LPCSTR 和 LPCWSTR 在WinNT.h中定义为:
typedef __nullterminated CONST CHAR *LPCSTR, *PCSTR;
typedef __nullterminated CONST WCHAR *LPCWSTR, *PCWSTR;
CHAR
并WCHAR
在WinNT.h中定义为:
typedef char CHAR;
#ifndef _MAC
typedef wchar_t WCHAR; // wc, 16-bit UNICODE character
#else
// some Macintosh compilers don't define wchar_t in a convenient location, or define it as a char
typedef unsigned short WCHAR; // wc, 16-bit UNICODE character
#endif
CreateFileA()
接受LPCSTR
文件名,这些文件名在内部存储在 8 位数char
组中。
CreateFileW()
接受LPCWSTR
文件名,这些文件名在内部存储在 16 位数wchar_t
组中。
我在C:\.txt位置创建了一个文件。似乎无法使用 打开此文件CreateFile()
,因为它包含 Unicode 代码点为 0x24B62 的字符,即使在 WCHAR 数组单元格中也不适合。
但该文件存在于我的硬盘中,Windows 正常管理它。如何通过 Win32 API 函数打开这个文件,就像 Windows 在内部一样?