• WriteFile函数


    WriteFile函数:

    该函数的功能是往文件中写数据,该函数可用来完成同步和异步操作的。写入的位置是由文件指针制定的文字,在完成写操作后,文件的指针会移动到文件新增加的字节的最后(当然这是在文件打开的方式不是FILE_FLAG_OVERLAPPED)。

    函数原型:

    BOOL WriteFile( HANDLE hFile// handle to file LPCVOID lpBuffer// data buffer DWORDnNumberOfBytesToWrite// number of bytes to write LPDWORD lpNumberOfBytesWritten// number of bytes written LPOVERLAPPED lpOverlapped // overlapped buffer );
    返回值:
    如果函数成功返回TRUE,否则返回FALSE。
    参数:
    hFile——已经打开的文件句柄。
    lpBuffer——缓冲区头指针,它的类型是 LPCVOID ,可以不经转化地传递任意类型的指针,如果需要传递的是一个例化的结构体,则可以使用“&”操作取地址。
    nNumberOfBytesToWrite——将要写入的字节数。
    lpNumberOfBytesWritten——实际写入的字节数。
    lpOverlapped——指向一个OVERLAPPED结构。大多数情况使用NULL。
    
    
     
    函数WriteFileReadFile声明如下:
    WINBASEAPI
    BOOL
    WINAPI
    WriteFile(
        __in        HANDLE hFile,
        __in_bcount(nNumberOfBytesToWrite) LPCVOID lpBuffer,
        __in        DWORD nNumberOfBytesToWrite,
        __out_opt   LPDWORD lpNumberOfBytesWritten,
        __inout_opt LPOVERLAPPED lpOverlapped
        );
       
    WINBASEAPI
    BOOL
    WINAPI
    ReadFile(
        __in        HANDLE hFile,
        __out_bcount_part(nNumberOfBytesToRead, *lpNumberOfBytesRead) LPVOID lpBuffer,
        __in        DWORD nNumberOfBytesToRead,
        __out_opt   LPDWORD lpNumberOfBytesRead,
        __inout_opt LPOVERLAPPED lpOverlapped
        );
     
    hFile是文件句柄。
    lpBuffer是读写数据缓冲区。
    nNumberOfBytesToWrite是多少数据要写入。
    lpNumberOfBytesWritten是已经写入多少数据。
    nNumberOfBytesToRead是多少数据要读取。
    nNumberOfBytesToRead是已经读取多少数据。
    lpOverlapped是异步读写的结构。
     
     
    调用函数的例子如下:
    #001  //创建、写入、读取文件。
    #002  //蔡军生 2007/10/21 QQ:9073204 深圳
    #003  void CreateFileDemo(void)
    #004  {
    #005         //
    #006         HANDLE hFile = ::CreateFile(_T("CreateFileDemo.txt"),     //创建文件的名称。
    #007               GENERIC_WRITE|GENERIC_READ,          // 写和读文件。
    #008               0,                      // 不共享读写。
    #009               NULL,                   // 缺省安全属性。
    #010               CREATE_ALWAYS,          // 如果文件存在,也创建。
    #011               FILE_ATTRIBUTE_NORMAL, // 一般的文件。      
    #012               NULL);                 // 模板文件为空。
    #013 
    #014         if (hFile == INVALID_HANDLE_VALUE)
    #015         {
    #016               //
    #017               OutputDebugString(_T("CreateFile fail!/r/n"));
    #018         }
    #019 
    #020         //往文件里写数据。
    #021         const int BUFSIZE = 4096;
    #022         char chBuffer[BUFSIZE];         
    #023         memcpy(chBuffer,"Test",4);
    #024         DWORD dwWritenSize = 0;
    #025        BOOL bRet = ::WriteFile(hFile,chBuffer,4,&dwWritenSize,NULL);
    #026         if (bRet)
    #027         {
    #028               //
    #029               OutputDebugString(_T("WriteFile 写文件成功/r/n"));
    #030         }
    #031 
    #032         //先把写文件缓冲区的数据强制写入磁盘。
    #033         FlushFileBuffers(hFile);
    #034 
    #035         //
    #036         //从文件里读取数据。
    #037         LONG lDistance = 0;
    #038         DWORD dwPtr = SetFilePointer(hFile, lDistance, NULL, FILE_BEGIN);
    #039         if (dwPtr == INVALID_SET_FILE_POINTER)
    #040         {
    #041               //获取出错码。
    #042               DWORD dwError = GetLastError() ;
    #043               //处理出错。           
    #044         }
    #045 
    #046         DWORD dwReadSize = 0;
    #047        bRet = ::ReadFile(hFile,chBuffer,4,&dwReadSize,NULL);
    #048         if (bRet)
    #049         {
    #050               //
    #051               OutputDebugString(_T("ReadFile 读文件成功/r/n"));
    #052         }
    #053         else
    #054         {
    #055               //获取出错码。
    #056               DWORD dwError = GetLastError();
    #057               //处理出错。           
    #058               TCHAR chErrorBuf[1024];
    #059               wsprintf(chErrorBuf,_T("GetLastError()=%d/r/n"),dwError);
    #060               OutputDebugString(chErrorBuf);
    #061         }
    #062 
    #063  }
  • 相关阅读:
    new Handler()和new Handler(Looper.getMainLooper())的区别
    Okhttp3日志采集功能
    【ACM打卡】ZOJ 1001 1048
    20180808 阿里巴巴测试开发工程师一面
    20180601 -1
    20180601
    20180601 指针
    20180601 虚函数
    20180601 C++-1
    20180601 C++
  • 原文地址:https://www.cnblogs.com/zhouwenJS/p/3628069.html
Copyright © 2020-2023  润新知