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);
  • 相关阅读:
    git push 小结
    在GitHub上创建代码仓库
    本人在CSDN上的技术博客访问量突破了10万次,特此截图留念
    和菜鸟一起学linux总线驱动之i2c死锁问题
    《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件
    Access text files using SQL statements by DB Query Analyzer
    git分享:Git_MinaPro
    git分享:Git_DataPro
    vimgrep 搜索总结
    HTML+CSS+JavaScript网页制作从新手到高手
  • 原文地址:https://www.cnblogs.com/AlwaysOnLines/p/5163618.html
Copyright © 2011-2022 走看看