文件操作——文件读写
来源:互联网 发布:效之 不亦达乎 编辑:程序博客网 时间:2024/06/17 17:18
文件读写实质也是调用API函数,微软给我们提供了强大的文件读写编程接口。
读写的一般步骤是:
1.调用CreateFile函数打开或者创建文件,返回文件句柄
2.利用文件句柄调用WriteFile或ReadFile函数写入或读取文件
3.调用CloseHandle函数关闭打开的文件句柄
第一个需要的函数CreateFile函数的函数原型:
HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
1.lpFileName参数指向要创建或打开的文件名,需要包含全路径
例如:c:\\a.txt
2.dwShareMode参数表示存取文件的方式,指明了要对文件进行何种操作。
GENERIC_READ表示只读方式打开文件;
GENERIC_WRITE表示以只写方式打开文件
二者组合
GENERIC_READ|GENERIC_WRITE:表示可读可写方式打开
3.lpSecurityAttributes参数指明了文件的安全属性,当文件被打开后,其他程序能以何种方式打开文件。
0:表示不允许再被打开
FILE_SHARE_READ:表示允许其他程序以只读方式打开
FILE_SHARE_WRITE:表示允许其他程序以写方式打开
4.dwCreationDisposition:指明文件存在或不存在时的操作。
CREATE_NEW:如果文件不存在则创建文件,存在则调用失败
CREATE_ALWAYS:如果存在,以覆盖方式创建
OPEN_EXISTING:如果存在则打开,否则失败
OPEN_ALWAYS:如果文件存在则打开,否则创建文件
5.dwFlagsAndAttributes:表示新建文件的属性
FILE_ATTRIBUTE_ARCHIVE:存档类型
FILE_ATTRIBUTE_HIDDEN:隐藏类型
FILE_ATTRIBUTE_READONLY:只读类型
FILE_ATTRIBUTE_SYSTEM:系统类型
6.hTemplateFile:指向用于存取的模板文件的句柄,系统会复制模板文件的所有属性到新创建的文件,没有则为NULL
函数调用成功返回文件句柄,失败返回INVALID_HANDLE_VALUE。
调用方式:
以只读方式打开已经存在的文件
hFile=CreateFile("c:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
以只写方式打开已存在的文件
hFile=CreateFile("c:\\test.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
创建一个新文件
hFile=CreateFile("c:\\test.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
调用成功后返回打开或创建的文件的句柄。
接着可以调用WriteFile和ReadFile进行文件读写。
函数原型:
BOOL WriteFile(HANDLE hFile,LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); BOOL ReadFile(HANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
hFile指向要读写的文件句柄
lpBuffer指向一个缓冲区,用于存储读写数据
nNumberOfBytesToRead、nNumberOfBytesToWrite表示要读写的字节数
lpNumberOfBytesRead、lpNumberOfBytesWritten返回实际读写的字节数
lpOverlapped指向一个OVERLAPPED结构体,这里设置为NULL即可
如果读写成功返回True,否则返回False。
最后需要调用CloseHandle函数关闭文件句柄
下面一个读写文件的小程序,实现了再文件末尾写入数据功能
#include "stdafx.h"#include <windows.h>#include <stdio.h>int main(int argc, char* argv[]){ //调用CreateFile函数以只写方式打开一个文件 HANDLE hFile=CreateFile(argv[1],GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile==INVALID_HANDLE_VALUE) { printf("CreateFile error\n"); return 0; } //调用SetFilePointer函数调整文件指针位置,移动到文件末尾 if(SetFilePointer(hFile,0,NULL,FILE_END)==-1) { printf("SetFilePointer error \n"); return 0; } char buff[256]="配置信息"; DWORD dwWrite; //把buff中的内容写入到文件末尾 if(!WriteFile(hFile,&buff,strlen(buff),&dwWrite,NULL)) { printf("WriteFile error \n"); return 0; } printf("往%s中写入数据成功\n",argv[1]); CloseHandle(hFile); return 0;}
下一篇:文件操作——复制,移动,删除
- 文件操作——读写文件
- 文件操作——文件读写
- python——常见读写文件操作
- C语言——文件读写操作
- MFC——8.文件读写操作
- php——读写文件操作
- php基础——文件读写操作
- hdfs——hadoop文件读写操作
- android文件操作——读写文件demo
- C文件操作、读写文件 C++文件读写、文件操作
- python 操作文件----文件读写
- Python文件操作读写文件
- Python文件操作读写文件
- Python文件操作读写文件
- Python文件操作读写文件
- Python文件操作读写文件
- Python文件操作读写文件
- Python文件操作读写文件
- hadoop通过FileSystem API读取和写入数据
- C#—特殊引用类型string
- 极光推送服务器端 代码
- 使用BAPI_REQUISITION_CREATE批量创建PR(采购申请)
- 网络流量计费程序(5)
- 文件操作——文件读写
- logminer
- Shell 输出字体颜色与背景颜色格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"
- T4模版生成SpringMVC构造REST代码:小结
- HTTP摘要认证
- NSSet和NSMutableSet
- Android "java.lang.NoClassDefFoundError:*"报错的处理方法
- javascript中的数组
- C#中this的用法,你用过几种?【含源码示例】