目前共有4篇帖子。 內容轉換:不轉換▼
 
點擊 回復
227 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)
 

本帖信息

點擊數:227 回複數:3
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-6-24 22:34
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。