文件操作——文件读写

来源:互联网 发布:效之 不亦达乎 编辑:程序博客网 时间: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;}

 下一篇:文件操作——复制,移动,删除

原创粉丝点击