我知道Win32下的CreateFile, ReadFile, WriteFile相当于ANSI C中的fopen之类函数的作用。但CreateFile, ReadFile, WriteFile是如何以二进制形式做文件I/O的呢?
就象fopen("name","rb");这种?
我好像觉得CreateFile, ReadFile, WriteFile是文本形式I/O的。谢谢!

解决方案 »

  1.   

    你在使用ReadFile和WriteFile时,无论是接收数据的缓冲区或要写入文件数据的缓冲区,其实都是二进制的,你用BYTE数组就可以了。
      

  2.   

    使用内存映射文件来读取文件数据://========================================================================
    // 返回文件数据指针
    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;
    }
      

  3.   

    fopen,read在windows中调用CreateFile,ReadFile, WriteFile