C/C++ 文件操作之CreateFile、ReadFile和WriteFile
来源:互联网 发布:永久免费手机扫描软件 编辑:程序博客网 时间:2024/05/30 05:42
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 );
代码示例:
BOOL Read(char *filePath){ HANDLE pFile; DWORD fileSize; char *buffer,*tmpBuf; DWORD dwBytesRead,dwBytesToRead,tmpLen; pFile = CreateFile(filePath,GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, //打开已存在的文件 FILE_ATTRIBUTE_NORMAL, NULL); if ( pFile == INVALID_HANDLE_VALUE) { printf("open file error!\n"); CloseHandle(pFile); return FALSE; } fileSize = GetFileSize(pFile,NULL); //得到文件的大小 buffer = (char *) malloc(fileSize); ZeroMemory(buffer,fileSize); dwBytesToRead = fileSize; dwBytesRead = 0; tmpBuf = buffer; do{ //循环读文件,确保读出完整的文件 ReadFile(pFile,tmpBuf,dwBytesToRead,&dwBytesRead,NULL); if (dwBytesRead == 0) break; dwBytesToRead -= dwBytesRead; tmpBuf += dwBytesRead; } while (dwBytesToRead > 0); // TODO 处理读到的数据 buffer free(buffer); CloseHandle(pFile); return TRUE;}
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);
代码示例:
BOOL Write(char *buffer, DWORD contentLen){ HANDLE pFile; char *tmpBuf; DWORD dwBytesWrite,dwBytesToWrite; pFile = CreateFile(filePath,GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, //总是创建文件 FILE_ATTRIBUTE_NORMAL, NULL); if ( pFile == INVALID_HANDLE_VALUE) { printf("create file error!\n"); CloseHandle(pFile); return FALSE; } dwBytesToWrite = contentLen; dwBytesWrite = 0; tmpBuf = buffer; do{ //循环写文件,确保完整的文件被写入 WriteFile(pFile,tmpBuf,dwBytesToWrite,&dwBytesWrite,NULL); dwBytesToWrite -= dwBytesWrite; tmpBuf += dwBytesWrite; } while (dwBytesToWrite > 0); CloseHandle(pFile); return TRUE;}
2 0
- C/C++ 文件操作之CreateFile、ReadFile和WriteFile
- C/C++ 文件操作之CreateFile、ReadFile和WriteFile
- CreateFile ReadFile WriteFile读写文件操作
- <Win32 API> 文件操作CreateFile/ReadFile/WriteFile
- win32 CreateFile readFile writefile 文件读写
- 文件操作:CreateFile和WriteFile的学习
- CreateFile ReadFile WriteFile 详解
- CreateFile ReadFile WriteFile 详解
- CreateFile、WriteFile、ReadFile
- 请问怎么操作USB口,也是和串口一样用CreateFile,ReadFile,WriteFile等等吗?
- CreateFile、ReadFile、WriteFile和fread、fwrite两种读写文件的方法
- CreateFile,ReadFile,WriteFile,DeviceIoControl,CloseHandle
- CreateFile,ReadFile,WriteFile,DeviceIoControl,CloseHandle .
- CreateFile,ReadFile,WriteFile使用记录
- 读写文件函数ReadFile和WriteFile解析
- 使用readfile 和 writefile 复制文件
- CreateFile WriteFile ReadFile FlushFileBuffers的基本用法
- Windows API应用:CreateFile,WriteFile,ReadFile
- 两个信封问题
- linux修改时间
- Web页错误:对象的当前状态使该操作无效。 编码窗体数据无效
- 关于jsp自定义标签
- 著名黑客雷蒙评价最重要的几种编程语言
- C/C++ 文件操作之CreateFile、ReadFile和WriteFile
- python给模块添加路径
- 使用 wsadmin 定位 WAS 资源对象的配置标识
- Android市场今年利润骤降,比预期低50%
- HDU 1003----Max Sum(最大连续子序列和)
- linux启动过程
- FFmpeg基本原理
- eclipse python 插件安装
- 僧多粥少?还原 OpenStack 的真实“钱景”