目前共有4篇帖子。 字体大小:较小 - 100% (默认)▼  内容转换:不转换▼
 
点击 回复
297 3
【表格】fopen的打开方式与CreateFile函数的对应关系
一派护法 十九级
1楼 发表于:2016-6-24 22:23
一派护法 十九级
2楼 发表于:2016-6-24 22:24
打开方式   DesiredAccess   CreationDisposition   备注  
rb   GENERIC_READ   OPEN_EXISTING     
rb+   GENERIC_READ | GENERIC_WRITE   OPEN_EXISTING     
wb   GENERIC_WRITE   CREATE_ALWAYS     
wb+   GENERIC_READ | GENERIC_WRITE   CREATE_ALWAYS     
ab   GENERIC_WRITE   OPEN_ALWAYS   打开后调用SetFilePointer(hFile, 0, 0, FILE_END);  
ab+   GENERIC_READ | GENERIC_WRITE   OPEN_ALWAYS   同上  
一派护法 十九级
3楼 发表于:2016-6-24 22:28
【示例程序】
#include <strsafe.h>
#include <Windows.h>

void print(LPCSTR str)
{
    WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), str, lstrlenA(str), NULL, NULL);
}

void uprint(LPCTSTR str)
{
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), str, lstrlen(str), NULL, NULL);
}

int main(void)
{
    DWORD dwNum, dwSize;
    HANDLE hFile, hHeap;
    LPSTR lpData;
    TCHAR str[100];

    hFile = CreateFile(TEXT("file.txt"), GENERIC_READ | GENERIC_WRITE, (DWORD)NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // 使用ab+方式打开文件, 但不把指针移到文件末尾
    if (hFile == INVALID_HANDLE_VALUE)
    {
        uprint(TEXT("无法打开文件\n"));
        return 1;
    }

    dwSize = GetFileSize(hFile, NULL);
    StringCbPrintf(str, sizeof(str), TEXT("文件大小: %d字节\n"), dwSize); // 相当于sprintf
    uprint(str);

    uprint(TEXT("文件内容: \n"));
    hHeap = GetProcessHeap();
    lpData = (LPSTR)HeapAlloc(hHeap, (DWORD)NULL, dwSize + 1); // 相当于malloc
    if (lpData != NULL)
    {
        ReadFile(hFile, lpData, dwSize, &dwNum, NULL); // 相当于fread, 但是第4个参数不能为NULL
        *(lpData + dwSize) = '\0';
        print(lpData);
        HeapFree(hHeap, (DWORD)NULL, lpData); // 相当于free
    }
    else
        uprint(TEXT("读取失败, 内存不足! \n"));

    WriteFile(hFile, "New Content\r\n", 13, &dwNum, NULL); // 相当于fwrite, 但是第4个参数不能为NULL

    CloseHandle(hFile); // 相当于fclose
    return 0;
}
一派护法 十九级
4楼 发表于:2016-6-24 22:34
dwNum = SetFilePointer(hFile, 0, 0, FILE_CURRENT); // 相当于ftell
StringCbPrintf(str, sizeof(str), TEXT("当前指针位置: %d\n"), dwNum);
uprint(str);

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:297 回复数:3
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-6-24 22:34
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。