WINDOWS API操作文件
标签:
c自学教程c学习c文件操作c文件编程 |
分类: VC 教程 |
基本概念
1、文件:
计算机文件属于文件的一种,与普通文件载体不同,计算机文件是以计算机硬盘为载体存储在计算机上的信息集合。文件可以是文本文档、图片、程序等等。文件通常具有三个字母的文件扩展名,用于指示文件类型(例如,图片文件常常以 JPEG 格式保存并且文件扩展名为 .jpg)。如下图都是文件。
http://s14/mw690/0023IUaVzy745Z9c8XP6d&690API操作文件" TITLE="WINDOWS
2、文件夹:
一种是计算机磁盘空间里面为了分类储存电子文件而建立独立路径的目录,“文件夹”就是一个目录
文件夹图标
名称,我们可以暂且称之为“电子文件夹”;
它提供了指向对应磁盘空间的路径地址,它可以有扩展名,但不具有文件扩展名的作用,也就不象文件那样用扩展名来标识格式。但它有几种类型,如:文档、图片、相册、音乐、音乐集等等。使用文件夹最大优点是为文件的共享和保护提供了方便。
为了分门别类的有序存放文件,操作系统把文件组织在若干目录中,也称文件夹。文件夹一般采用多层次结构(树状结构),在这种结构中每一个磁盘有一个根文件夹,它包含若干文件和文件夹。文件夹不但可以包含文件,而且可包含下一级文件夹,这样类推下去形成的多级文件架结构既帮助了用户将不同类型和功能的文件分类储存,又方便文件查找,还允许不同文件夹中文件拥有同样的文件名。
注:文件名不能超过255个字符(包括空格)。
文件夹是用来组织和管理磁盘文件的一种数据结构。如下图:
http://s6/mw690/0023IUaVzy745Zf5dVXa5&690API操作文件" TITLE="WINDOWS
编程操作文件
那么对于一个文件,我们如何去操作它呢,比如我们平常双击打开一个WORD文件,OFFICE 程序是怎么把里面的数据读取出来,显示出来的呢。我们通常都是调用WINDOWS提供的API(Application Programming Interface,应用程序编程接口)接口来操作文件。如下面图,显示的是我们的应用程序调用API接口去访问底层的资源。
http://s2/mw690/0023IUaVzy745ZgtWSJe1&690API操作文件" TITLE="WINDOWS
我们都知道,文件一般都存放在硬盘,U盘,移动硬盘等介质里,它是属于计算机硬件系统的,我们要去读取必须要通过操作系统,而通过操作系统就必须要调用文件操作的相关API接口来访问。
那我们要操作文件要经历哪几步呢。我们可以想象一下,我们平时玩手机,玩电脑的一般步骤是什么呢。你肯定很容易想到:
开机------》开始玩-----》关机。
我们操作一个文件其实步骤也是一样的。
打开文件-----》读写文件-----》关闭文件。
那么要操作一个文件的API都有哪些呢?看下面
打开/创建文件
API函数CreateFile可打开和创建文件、管道、邮槽、通信服务、设备以及控制台,但是在此时只是介绍用这个函数怎么实现创建和打开一个文件。
HANDLE
CreateFile(
LPCTSTR
lpFileName, //
要打开的文件名
DWORD
dwDesiredAccess, //
文件的操作属性,期望以什么样的权限来访问文件
DWORD
dwShareMode, //
文件共享属性,打开文件后,希望别人可以以怎么样的共享方式来访问文件
LPSECURITY_ATTRIBUTES
lpSecurityAttributes,//
文件安全特性
,通常为空
DWORD
dwCreationDisposition, //文件操作,是要创建文件还是要打开文件,具体参数请看下面
DWORD
dwFlagsAndAttributes, //
文件属性
HANDLE
hTemplateFile //
如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性
重点函数参数说明如下:
dwDesiredAccess 文件的操作属性:如果为零,表示只允许获取与一个设备有关的信息,GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);
dwShareMode 文件的共享属性:零表示不共享; FILE_SHARE_READ 或 FILE_SHARE_WRITE 表示允许对文件进行读/写共享访问;
dwCreationDisposition 文件的操作有:
·CREATE_NEW:创建文件;如文件存在则会出错
·CREATE_ALWAYS:创建文件,会改写前一个文件
·OPEN_EXISTING:文件必须已经存在。由设备提出要求
·OPEN_ALWAYS:如文件不存在则创建它
·TRUNCATE_EXISTING:将现有文件缩短为零长度
dwFlagsAndAttributes 文件属性有:
·FILE_ATTRIBUTE_ARCHIVE:标记归档属性
·FILE_ATTRIBUTE_COMPRESSED:将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式
·FILE_ATTRIBUTE_NORMAL:默认属性
·FILE_ATTRIBUTE_HIDDEN:隐藏文件或目录
·FILE_ATTRIBUTE_READONLY:文件为只读
·FILE_ATTRIBUTE_SYSTEM:文件为系统文件
·FILE_FLAG_WRITE_THROUGH:操作系统不得推迟对文件的写操作
·FILE_FLAG_OVERLAPPED:允许对文件进行重叠操作
·FILE_FLAG_NO_BUFFERING:禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块
·FILE_FLAG_RANDOM_ACCESS:针对随机访问对文件缓冲进行优化
·FILE_FLAG_SEQUENTIAL_SCAN:针对连续访问对文件缓冲进行优化
·FILE_FLAG_DELETE_ON_CLOSE:关闭了上一次打开的句柄后,将文件删除。特别适合临时文件
可以组合的属性有:FILE_FLAG_WRITE_THROUGH,FILE_FLAG_OVERLAPPED, FILE_FLAG_NO_BUFFERING,FILE_FLAG_RANDOM_ACCESS, FILE_FLAG_SEQUENTIAL_SCAN,FILE_FLAG_DELETE_ON_CLOSE, FILE_FLAG_BACKUP_SEMANTICS,FILE_FLAG_POSIX_SEMANTICS, FILE_FLAG_OPEN_REPARSE_POINT,FILE_FLAG_OPEN_NO_RECALL
函数的返回值说明
如果成功返回一个打 开文件得句柄,如果调用函数之前文件存在,文件操作属性为:CREATE_ALWAYS 或 OPEN_ALWAYS,使用GetLastError函数返回的是ERROR_ALREADY_EXISTS(包括函数操作成功),如果之前函数不存 在,则返回0。使用失败返回INVALID_HANDLE_VALUE,要取得更多的信息,使用GetLastError函数。
读写文件
从CreateFile函数返回的值可以知道,我们可以通过打开的文件句柄去操作文件了。
读文件
BOOL ReadFile(
);
写文件
BOOL WriteFile(
);
关闭文件
不再需要操作文件时,我们需要把打开/创建的文件进行关闭,调用如下API:
BOOL CloseHandle(
);
文件读写指针
我们读写文件时,往往都是直接从文件头开始读写,但有的时候我们打开一个旧的文件,我们想直接读到文件里的第几个数据,怎么处理呢,有一个函数可以设置文件的读写点,我们可以把它叫做读写指针。函数如下
DWORD SetFilePointer(
);
参数说明
dwMoveMethod
FILE_BEGIN,
FILE_CURRENT,
FILE_END ,从文件最后向前移
操作实例
例子1、在当前目录下面创建一个文件:
HANDLE
handle;
DWORD
Num;
handle=
::CreateFile("new.tmp",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,
FILE_FLAG_DELETE_ON_CLOSE,NULL);
if(INVALID_HANDLE_VALUE!= handle
)
{
::SetFilePointer(handle,0,0,FILE_BEGIN);
char Buffer[] =
"这是个刚创建的文件";
::WriteFile(handle,Buffer,sizeof(Buffer),&Num,NULL);
ZeroMemory(Buffer,sizeof(Buffer));
::SetFilePointer(handle,0,0,FILE_BEGIN);
::ReadFile(handle,Buffer,sizeof(Buffer),&Num,NULL);
MessageBox(Buffer);
::CloseHandle(handle);
}
可以改变上面的创建文件的属性和操作看下不同效果。

加载中…