首页 > 代码库 > C/C++ 文件操作之CreateFile、ReadFile和WriteFile
C/C++ 文件操作之CreateFile、ReadFile和WriteFile
通常使用下列函数来通过Win系统来对外围设备进行通信处理:
-------------------------------
1. CreateFile
这个函数的功能是创建或者打开一个文件或者I/O设备,通常使用的I/O形式有文件、文件流、目录、物理磁盘、卷、终端流等。如执行成功,则返回文件句柄。 INVALID_HANDLE_VALUE 表示出错,会设置 GetLastError 。
函数的声明定义:
HANDLE WINAPI CreateFile(
_In_ LPCTSTR lpFileName,
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwShareMode,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
_In_ DWORD dwCreationDisposition,
_In_ DWORD dwFlagsAndAttributes,
_In_opt_ HANDLE hTemplateFile
);
参数列表:
2. ReadFile
从文件指针指向的位置(设备文件,通信)开始将数据读出到一个文件中, 且支持同步和异步操作,如果文件打开方式没有指明FILE_FLAG_OVERLAPPED的话,当程序调用成功时,它将实际读出文件的字节数保存到lpNumberOfBytesRead指明的地址空间中。FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作。
函数声明定义:
BOOL WINAPI ReadFile( __in HANDLE hFile, // 文件句柄 __out LPVOID lpBuffer, // 接收数据用的 buffer __in DWORD nNumberOfBytesToRead, // 要读取的字节数 __out LPDWORD lpNumberOfBytesRead, // 实际读取到的字节数 __in LPOVERLAPPED lpOverlapped // OVERLAPPED 结构,一般设定为 NULL );
代码示例:、
1 BOOL Read(char *filePath) 2 { 3 HANDLE pFile; 4 DWORD fileSize; 5 char *buffer,*tmpBuf; 6 DWORD dwBytesRead,dwBytesToRead,tmpLen; 7 8 pFile = CreateFile(filePath,GENERIC_READ, 9 FILE_SHARE_READ, 10 NULL, 11 OPEN_EXISTING, //打开已存在的文件 12 FILE_ATTRIBUTE_NORMAL, 13 NULL); 14 // 创建设备文件,返回文件的位置 15 if ( pFile == INVALID_HANDLE_VALUE) 16 { 17 printf("open file error!\n"); 18 CloseHandle(pFile); 19 return FALSE; 20 } 21 22 fileSize = GetFileSize(pFile,NULL); //得到文件的大小 23 24 buffer = (char *) malloc(fileSize); 25 ZeroMemory(buffer,fileSize); 26 dwBytesToRead = fileSize; 27 dwBytesRead = 0; 28 tmpBuf = buffer; 29 30 do{ //循环读文件,确保读出完整的文件 31 32 ReadFile(pFile,tmpBuf,dwBytesToRead,&dwBytesRead,NULL); 33 34 if (dwBytesRead == 0) 35 break; 36 37 dwBytesToRead -= dwBytesRead; 38 tmpBuf += dwBytesRead; 39 40 } while (dwBytesToRead > 0); 41 42 // TODO 处理读到的数据 buffer 43 44 free(buffer); 45 CloseHandle(pFile); 46 47 return TRUE; 48 }
3. WriteFile
将数据写入一个文件(设备文件,通信)。该函数比fwrite函数要灵活的多。也可将这个函数应用于对通信设备、管道、套接字以及邮槽的处理。返回时,TRUE(非零)表示成功,否则返回零。会设置GetLastError。
函数声明定义:
BOOL WINAPI WriteFile( __in HANDLE hFile, // 文件句柄 __in LPCVOID lpBuffer, // 要写入的数据 __in DWORD nNumberOfBytesToWrite, // 要写入的字节数 __out LPDWORD lpNumberOfBytesWritten, // 实际写入的字节数 __in LPOVERLAPPED lpOverlapped // OVERLAPPED 结构,一般设定为 NULL );
示例代码:
1 BOOL Write(char *buffer, DWORD contentLen) 2 { 3 HANDLE pFile; 4 char *tmpBuf; 5 DWORD dwBytesWrite,dwBytesToWrite; 6 7 pFile = CreateFile(filePath,GENERIC_WRITE, 8 0, 9 NULL, 10 CREATE_ALWAYS, //总是创建文件 11 FILE_ATTRIBUTE_NORMAL, 12 NULL); 13 14 if ( pFile == INVALID_HANDLE_VALUE) 15 { 16 printf("create file error!\n"); 17 CloseHandle(pFile); 18 return FALSE; 19 } 20 21 dwBytesToWrite = contentLen; 22 dwBytesWrite = 0; 23 24 tmpBuf = buffer; 25 26 do{ //循环写文件,确保完整的文件被写入 27 28 WriteFile(pFile,tmpBuf,dwBytesToWrite,&dwBytesWrite,NULL); 29 30 dwBytesToWrite -= dwBytesWrite; 31 tmpBuf += dwBytesWrite; 32 33 } while (dwBytesToWrite > 0); 34 35 CloseHandle(pFile); 36 37 return TRUE; 38 }
endl;
C/C++ 文件操作之CreateFile、ReadFile和WriteFile
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。