对文件的操作windows API函数

C和C++都提供了对文件的操作方法,但是在程序中也提供了一些API函数来对文件进行操作。
文件的创建:调用CreateFile()函数来创建文件。其函数原型是:
HANDLE CreateFile( LPCTSTR lpFileName,
                                   DWORD
dwDesiredAccess,
                                  
DWORD dwShareMode,
                                  
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
                                  
DWORD dwCreationDispostion ,
                                   DWORD dwFlagsAndAttributes,
                                  
HANDLE hTemplateFile
                                  );
函数调用成功以后,调用函数CloseHandle来关闭句柄。

操作成功则返回指向文件的句柄。其中的参数意义为:
lpFileName:  指定用于创建和打开的文件名或者对象名(CreateFile并不是单单创建文件,也可以创建其它的对象)

dwDesiredAccess:对象的访问方式(读,写等等)取值为
                             0(对象具有设备查询权限)
                             GENERIC_READ   对象具有读文件的权限,可以移动文件的指针
                             GENERIC_WRITE 写文件。可以通过或操作进行连接

dwShareMode:共享模式,如果为0则不共享,也可以取以下值
                        FILE_SHARE_READ      对文件进行只读共享
                        FILE_SHARE_WRITE    对文件进行写入共享

lpSecurityAttributes:指定对所创建对象的访问权限以及是否能够被子进程所继承。在客户端软件中很少用的,一般  直接设置为NULL.

dwCreationDispostion :指定如何创建文件。可以取以下值
CREATE_NEW   创建新文件,如果文件存在,则函数调用失败
CREATE_ALWAYS    创建新文件,如果文件存在,则函数清空所有现有属性
OPEN_EXISTING       打开现有文件,如果文件不存在,则函数调用失败
OPEN_ALWAYS        打开现有文件,如果文件不存在,则函数将创建新的文件(类似CREATE_NEW)
TRUNCATE_EXISTING   打开现有文件,一旦文件被打开,则其长度被截断成0,函数必须用GENERIC_WRITE来访问该文件。

dwFlagsAndAttributes:设定文件的属性和标志,可以是一下值的任意组合
FILE_ATTRIBUTE_ARCHIVE    存档文件,应用程序用此来标记文件的备份或删除
          FILE_ATTRIBUTE_HIDDEN      隐藏文件
FILE_ATTRIBUTE_NORMAL    一般都采取此方式,单独使用
          FILE_ATTRIBUTE_READONLY  只读文件
FILE_ATTRIBUTE_SYSTEM       系统文件
          FILE_ATTRIBUTE_TEMPORARY   临时文件

FILE_FLAG_WRITE_THROUGH    数据不经过缓存直接写入文件
          FILE_FLAG_OVERLAPPED          指示系统初始化该文件对象       
FILE_FLAG_RANDOM_ACCESS   随机读取文件

hTemplateFile:指定具有GENERIC_READ访问方式的模板文件的句柄,如果该参数为不为空,则CreateFile函数会忽略所有指定的属性,而直接采用模板文件的属性。注意,只有在GENERIC_READ方式下才可以。否则设置为NULL

文件的写入:调用WriteFile函数来向文件中写入数据。其函数原型为
WriteFile

BOOL WriteFile( HANDLE hFile, 
                LPCVOID lpBuffer, 
                DWORD nNumberOfBytesToWrite, 
                LPDWORD lpNumberOfBytesWritten, 
                LPOVERLAPPED lpOverlapped
);

参数说明:
hFile:CreateFile函数所创建的文件句柄
lpBuffer:缓冲区数组
nNumberOfBytesToWrite:指明向文件中写入的字节数
lpNumberOfBytesWritten:实际写入到文件的字节数
lpOverlapped:一般设置为NULL.表示以同步的方式写入。如果在CreateFile函数中指定了

FILE_FLAG_OVERLAPPED标记,则可以传入一个OVERLAPPED结构体的指针。

读取文件:调用ReadFile函数来执行对文件的读入操作
BOOL ReadFile( HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);

 各参数的含义和WriteFile函数中是一样的。

同上,用一个例子来使用上述函数
#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;

int main()
{
HANDLE hFile;
//创建文件
hFile=CreateFile("3.txt",GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
//接受实际写入的字节数
DWORD dwWrites;
//写入数据
WriteFile(hFile,"调用API函数向文件中写入数据",strlen("调用API函数向文件中写入数据"),&dwWrites,NULL);
CloseHandle(hFile);

//读取文件的内容
//创建文件
hFile=CreateFile("3.txt",GENERIC_READ,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
//接受实际读取的字节数
DWORD dwReads;
//创建缓冲区,存放从文件中读取的数据
char buffer[100];
memset(buffer,0,100);
ReadFile(hFile,buffer,100,&dwReads,NULL);
CloseHandle(hFile);

for(int i=0;i<100;i++)
{
if(buffer[i])
cout<<buffer[i];
}
return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值