zoukankan      html  css  js  c++  java
  • Win32 WriteFile and ReadFile

    HANDLE WINAPI CreateFile(
      __in          LPCTSTR lpFileName,             // 文件路径
      __in          DWORD dwDesiredAccess,          // 访问权限,GENERIC_READ | GENERIC_WRITE
      __in          DWORD dwShareMode,              // 共享模式,NULL | FILE_SHARE_READ | FILE_SHARE_WRITE
      __in          LPSECURITY_ATTRIBUTES lpSecurityAttributes,    // 安全属性
      __in          DWORD dwCreationDisposition,    // 创建配置,CREATE_ALWAYS | CREATE_NEW | OPEN_ALWAYS | OPEN_EXISTING
      __in          DWORD dwFlagsAndAttributes,     // 扩展属性,NULL | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY
      __in          HANDLE hTemplateFile            // 指定一个文件句柄,新文件将从这个文件中复制扩展属性。NULL
    );
    
    BOOL WINAPI ReadFile(
      __in          HANDLE hFile,                   // 文件句柄
      __out         LPVOID lpBuffer,                // 接收数据用的 buffer
      __in          DWORD nNumberOfBytesToRead,     // 要读取的字节数
      __out         LPDWORD lpNumberOfBytesRead,    // 实际读取到的字节数
      __in          LPOVERLAPPED lpOverlapped       // OVERLAPPED 结构,一般设定为 NULL 
    );
    
    BOOL WINAPI WriteFile(
      __in          HANDLE hFile,                   // 文件句柄
      __in          LPCVOID lpBuffer,               // 要写入的数据
      __in          DWORD nNumberOfBytesToWrite,    // 要写入的字节数
      __out         LPDWORD lpNumberOfBytesWritten, // 实际写入的字节数
      __in          LPOVERLAPPED lpOverlapped       // OVERLAPPED 结构,一般设定为 NULL
    );
    
    DWORD WINAPI GetFileSize(
      __in          HANDLE hFile,                   // 文件句柄
      __out         LPDWORD lpFileSizeHigh          // high-order 的返回值,一般设定为 NULL
    );





    一.创建文件

    HANDLE hFile = CreateFile(TEXT("E:\CreateFileDemo.txt"),     //创建文件的名称。
        GENERIC_WRITE|GENERIC_READ,           // 写和读文件。
        0,                              // 不共享读写。
        NULL,                           // 缺省安全属性。
        CREATE_ALWAYS,                  // 如果文件存在,也创建。
        FILE_ATTRIBUTE_NORMAL,          // 一般的文件。       
        NULL);                          // 模板文件为空。
    if (hFile == INVALID_HANDLE_VALUE) 
    { 
        OutputDebugString(TEXT("CreateFile fail!
    "));
    }
    

    二.WriteFile写文件

    写入缓冲区

    const int BUFSIZE = 4096;
    char chBuffer[BUFSIZE];          
    memcpy(chBuffer,"Test",4);
    DWORD dwWritenSize = 0;
    BOOL bRet = WriteFile(hFile,chBuffer,4,&dwWritenSize,NULL);
    if (bRet)
    {
        OutputDebugString(TEXT("WriteFile 写文件成功
    "));
    }
    

    三.FlushFileBuffers刷新文件缓冲区

    只有调用了FlushFileBuffers,文件数据才会真正被写入

    四.ReadFile读文件

    DWORD dwReadSize = 0;
    ZeroMemory(chBuffer,4096);
    bRet = ReadFile(hFile,chBuffer,4,&dwReadSize,NULL);
    
    if (bRet)
    {
        OutputDebugString(TEXT("ReadFile 读文件成功
    "));
    }
    else
    {
        //获取出错码。
        DWORD dwError = GetLastError(); 
        //处理出错。            
        TCHAR chErrorBuf[1024];
        wsprintf(chErrorBuf,TEXT("GetLastError()=%d
    "),dwError);
        OutputDebugString(chErrorBuf);
    }
    

    五.设置文件读写位置

    LONG lDistance = 0;
    DWORD dwPtr = SetFilePointer(hFile, lDistance, NULL, FILE_BEGIN);

    SetEndOfFile函数,将当前文件位置设为文件末尾,GetFileSizeEx返回文件末尾大小

    SetEndOfFile(hFile);
    LARGE_INTEGER liFileSize;
    GetFileSizeEx(hFile,&liFileSize);
  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/AlwaysOnLines/p/5163618.html
Copyright © 2011-2022 走看看