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);
  • 相关阅读:
    win10安装.net 3.5无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动
    配置SQL用户访问指定表,指定列
    GNU Gettext for Delphi, C++ and Kylix
    Delphi 7 中使用IdUDPServer1和IdUDPClient1控件实现通信检测
    xp不能安装NET Framework4.0解决方法
    基于TCP的Socket连接【Delphi版】
    牛客网优惠码
    GitHub基本操作
    xdb-test
    设置本地yum源
  • 原文地址:https://www.cnblogs.com/AlwaysOnLines/p/5163618.html
Copyright © 2011-2022 走看看