我知道Win32下的CreateFile, ReadFile, WriteFile相当于ANSI C中的fopen之类函数的作用。但CreateFile, ReadFile, WriteFile是如何以二进制形式做文件I/O的呢?
就象fopen("name","rb");这种?
我好像觉得CreateFile, ReadFile, WriteFile是文本形式I/O的。谢谢!
就象fopen("name","rb");这种?
我好像觉得CreateFile, ReadFile, WriteFile是文本形式I/O的。谢谢!
// 返回文件数据指针
PBYTE cwlLoadFile(LPCTSTR IN lpszFileName, LPDWORD OUT lpdwSize /* = NULL */,
BOOL IN bReadOnly /* = TRUE */)
{
// 打开文件
HANDLE hFile = CreateFile(lpszFileName, IIf(bReadOnly, GENERIC_READ,
GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, NULL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
return NULL;
} // 如果需要的话,获取文件大小
if (lpdwSize) {
*lpdwSize = GetFileSize(hFile, NULL);
} // 创建文件映射
HANDLE hMapFile = CreateFileMapping(hFile, NULL, IIf(bReadOnly,
PAGE_READONLY, PAGE_READWRITE), 0, 0, NULL);
CloseHandle(hFile);
if (hMapFile == NULL) {
return NULL;
} // 映射文件
PBYTE pbFile = (PBYTE)MapViewOfFile(hMapFile, IIf(bReadOnly,
FILE_MAP_READ, FILE_MAP_READ | FILE_MAP_WRITE), 0, 0, 0);
CloseHandle(hMapFile); return pbFile;
}// 使用完毕后用 cwlFreeFile 释放
PBYTE cwlFreeFile(PBYTE pbFile)
{
if (pbFile && UnmapViewOfFile(pbFile)) {
return NULL;
} return pbFile;
}