WriteFile函数
WriteFile函数:
该函数的功能是往⽂件中写数据,该函数可⽤来完成同步和异步操作的。写⼊的位置是由⽂件指针制定的⽂字,在完成写操作后,⽂件的指针会移动到⽂件新增加的字节的最后
(当然这是在⽂件打开的⽅式不是FILE_FLAG_OVERLAPPED)。
函数原型:
BOOL WriteFile( HANDLE hFile, // handle to file LPCVOID lpBuffer, // data buffer DWORD nNumberOfBytesToWrite, // number of bytes to write LPDWORD lpNumberOfBytesWritten, // number of bytes written LPOVERLAPPED lpOverlapped 返回值:
如果函数成功返回TRUE,否则返回FALSE。
参数:
hFile——已经打开的⽂件句柄。
lpBuffer——缓冲区头指针,它的类型是 LPCVOID ,可以不经转化地传递任意类型的指针,如果需要传递的是⼀个例化的结构体,则可以使⽤“&”操作取地址。
nNumberOfBytesToWrite——将要写⼊的字节数。
lpNumberOfBytesWritten——实际写⼊的字节数。
lpOverlapped——指向⼀个OVERLAPPED结构。⼤多数情况使⽤NULL。
函数WriteFile和ReadFile声明如下:
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(""),    //创建⽂件的名称。
#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              //
write的返回值
#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  }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。