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);
  • 相关阅读:
    数据库的ACID
    动态SQL (if , choose (when, otherwise) , trim (where, set) , set , foreach)
    接口 和xml 中的知识
    Mybatis简介 接口式编程
    批处理 编程式事务
    AOP实现日志打印 基于xml配置的AOP实现 切入点表达式
    1、使用注解配置bean @Controller @Service @Repository 2.基于xml的属性装配 3、context:include-filter指定扫描包时要包含的类 ,context:exclude-filter(不包含)
    数据库连接池简介,使用
    配置通过静态工厂方法创建的bean , 配置通过实例工厂方法创建的bean , 配置FactoryBean★
    SpringMVC 拦截器 异常
  • 原文地址:https://www.cnblogs.com/AlwaysOnLines/p/5163618.html
Copyright © 2011-2022 走看看