WriteFile函数
(2012-05-08 15:59:31)
标签:
writefile函数it |
分类: C/C |
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 // overlapped buffer );
返回值:
如果函数成功返回TRUE,否则返回FALSE。
参数:
hFile——已经打开的文件句柄。
lpBuffer——缓冲区头指针,它的类型是 LPCVOID ,可以不经转化地传递任意类型的指针,如果需要传递的是一个例化的结构体,则可以使用“&”操作取地址。
nNumberOfBytesToWrite——将要写入的字节数。
lpNumberOfBytesWritten——实际写入的字节数。
lpOverlapped——指向一个OVERLAPPED结构。大多数情况使用NULL。
函数WriteFile和ReadFile声明如下:
WINBASEAPI
BOOL
WINAPI
WriteFile(
WINBASEAPI
BOOL
WINAPI
ReadFile(
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 }