【VC++深入详解】Win32 API对文件操作的支持
以下内容摘自孙鑫的《VC++深入详解》,略有改动,特此声明。
感言:在各个C++社区总会有一帮只用Win32 API编程的人,我一直对这帮人十分敬佩。Win32的强大不用多说,但强大也意味着难以使用、不便上手,需要熟练查阅MSDN。Win32在这个充斥着面向对象思想的时代里显得有些陈旧,甚至濒临淘汰,但是它却代表着一种傲然于MFC的底层精神。有段时间需要做音频处理,我便对它的功能之强大叹为观止,同时也头痛于它编写起来的繁琐,但最让我欢欣雀跃的是,它的底层精神让我对操作系统的那些枯燥的理论知识有了更加深入的了解。所以在此十分建议以后大学开设操作系统的课程时,一定要配备运用Win32或者Shell编程这样的实践环节,否则学到的绝对是一纸空文。
一、文件的创建、打开和写入
可先看一看CreateFile函数的原型声明和WriteFile函数的原型声明。下面是一个简单的例子:
HANDLE hFile; //定义一个句柄变量
hFile =CreateFile("5.txt",GENERIC_WRITE,0,NULL,CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,NULL); //创建文件
DWORD dwWrites; //接收实际写入的字节数
WriteFile(hFile,"pragmaticpezy.diandian.com",strlen("pragmaticpezy.diandian.com"),
&dwWrites,NULL); //写入数据
CloseHandle(hFile); //关闭文件句柄
解释:CreateFile中,参数一为文件名,参数二代表访问方式(写),参数三是共享参数(0为不能被共享),参数四是安全属性(NULL为默认),参数五表示创建方式(新建),参数六是文件属性(标准),最后是模板文件句柄(NULL默认)。WriteFile中,参数一是要写入文件的句柄,参数二是内容,参数三是要往里面写的字节数,参数四是接收实际写入文件中的字节数,最后一个是指向OVERLAPPED的指针,这里没有定义,故为NULL。
二、文件的读取
可参考ReadFile函数的原型声明,举例如下:
HANDLE hFile; //定义一个句柄变量
hFile = CreateFile("5.txt",GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL); //打开文件
char ch[100];
DWORD dwReads; //接收实际读取到的字节数
ReadFile(hFile,ch,100,&dwReads,NULL); //读取数据
ch[dwReads]=0; //设置字符串结束字符
CloseHandle(hFile); //关闭打开的文件对象的句柄
MessageBox(ch); //显示读取到的数据
解释:ReadFile函数与WriteFile函数基本一致。这里列举的都是最简单的运用,更复杂的操作需要对参数理解深刻。更多内容请查阅MSDN。