C语言学习笔记(2023/3/7)

在编写仿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) );

表示如果查找结果位目录的话,就继续递归查找目录下面的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值