在编写仿Windows资源管理器项目的时候发现的自己不懂的地方,于是记下来。
fopen函数用法:
所需头文件:
#include<stdio.h>
函数原型:
FILE *fopen(const char *filename, const char *mode);
返回值:
fopen函数返回新打开文件的文件指针;
如果此文件不能打开,则返回NULL指针。
参数和模式
filename: 要打开的文件名字符串
mode: 访问文件的模式, 它包括:
"r"打开文件仅供读取必须存在
"w"创建新文件仅供写入若存在,则清空后再写入
"a"打开文件附加写入若不存在,则创建新文件写入
"r+"打开文件供读取并写入必须存在
"w+"创建新文件供读取并写入若存在,则清空后再写入
"a"打开文件读取并附加写入若不存在,则创建新文件写入
注意:
fopen可以用文本模式或二进制模式打开文件。
word和jpg文件有自己特殊的格式,理论上讲如果了解其文件存储格式的话,可以用二进制方式打开、进行读写;但实际上都比较复杂不可取。
fopen打开不能打开文件夹(文件夹的本质是一个目录)
合格的程序员写法:
FILE *fpr=NULL;
if((fp=fopen("F:\\test.txt","r"))==NULL){
printf("error!");
getchar();
exit(1);
}
那么怎么读取一个未知文件夹里面的文件?
findfirst函数用法(只限于Windows,Linux需使用opendir)
函数原型:
int findfirst(char *fname,struct ffblk *ptr,int attrib)
函数功能:
寻找与fname相匹配的第一个文件名称
findfirst()函数的返回值:成功返回0,不成功返回-1
参数说明:
ptr保存查找到的文件信息
ffblk为指定的保存文件信息的一个结构,定义如下:
struct ffblk
{
char ff_reserved[21]; /*DOS保留字*/
char ff_attrib; /*文件属性*/
int ff_ftime; /*文件时间*/
int ff_fdate; /*文件日期*/
long ff_fsize; /*文件长度*/
char ff_name[13]; /*文件名*/
}
attrib为文件属性,由以下字符代表
FA_RDONLY 只读文件 :第一位0/1表示 | FA_LABEL 卷标号 :第二位0/1表示 |
FA_HIDDEN 隐藏文件 :第三位0/1表示 | FA_DIREC 目录 :第四位0/1表示 |
FA_SYSTEM 系统文件 :第五位0/1表示 | FA_ARCH 档案 :第六位0/1表示 |
特殊/高级用法
1.p=findfirst ("*.*",&dirment,0x3f);
用于查找当前文件夹下所有文件,direment存放查找结果,0x3f就是2进制的00111111,表示六个标志位全满,即
FA_RDONLY|FA_LABEL|FA_HIDDEN|FA_DIREC|FA_SYSTEM|FA_ARCH = 1|10|100|1000|10000|100000 = 0x3f.
2.if (!p&&dirment.ff_name[0]=='.'))
'.’表示当前目录,组合起来如果查找结果有当前目录,那继续在当前目录查找。
3.if ((dirment.ff_attrib&0x10)==FA_DIREC) );
表示如果查找结果位目录的话,就继续递归查找目录下面的文件。