C++学习重难点(八)

今天来分享一下c++查找文件的内容,这也是博主最近在和朋友组队做项目现学的内容。这部分内容不算c++基础语法内容,在视频中也很少看到(博主以前没接触过)。到底如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数。

下面我们一起来看看吧。

主要头文件#include<io.h>

下面这些结构体都是包含在头文件<io.h>中的。底层原理不用写的。

1.结构体_finddata_t(这个结构体是用来存储文件各种信息的)

底层原理:

struct _finddata_t

{ unsigned attrib;//attrib:用于表示文件的属性,位表示,那么当一个文件有多个属性时,它往往是通过位或的方式,来得到几个属性的综合。_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)

time_t time_create;//time_create:文件创建的时间;

time_t time_access;//time_access:最后一次被访问的时间;

time_t time_write;//time_write:最后一次被修改的时间;

_fsize_t size;//size:文件大小,_fsize_t应该可以相当于unsigned整型,表示文件的字节数;

char name[_MAX_FNAME];//文件的文件名。这里的_MAX_FNAME是一个常量宏,它在<stdlib.h>头文件中被定义,表示的是文件名的最大长度;

};

那么如何把一个硬盘文件的文件信息“存到”这个结构体所表示的内存空间里去呢?这就要靠_findfirst、_findnext和_fineclose三个函数的搭配使用了。

2.结构体_findfirst

底层原理:long _findfirst( char *filespec, struct _finddata_t *fileinfo )

filespec:标明文件的字符串,可支持通配符。比如:*.c,则表示当前文件夹下的所有后缀为C的文件。
fileinfo :这里就是用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明,不过不用初始化,只要分配了内存空间就可以了。函数成功后,函数会把找到的文件的信息放入这个结构体中。

返回值:如果查找成功的话,将返回一个long型的唯一的查找用的句柄(就是一个唯一编号)。这个句柄将在_findnext函数中被使用。若失败,则返回-1。

3.结构体_findnext

底层原理:

nt _findnext( long handle, struct _finddata_t *fileinfo )

handle:即由_findfirst函数返回回来的句柄。
fileinfo:文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。

返回值:若成功返回0,否则返回-1。

4.结构体:

_findclose

int _findclose( long handle )
handle :_findfirst函数返回回来的句柄
返回值:成功返回0,失败返回-1。

 大家看到这里,估计都能猜到个大概了吧?先用_findfirst查找第一个文件,若成功则用返回的句柄调用_findnext函数查找其他的文件,当查找完毕后用,用_findclose函数结束查找。

字符有关操作(这其实和C语言的字符串函数差不多)

1.strcat

char *strcat(char *s1,const char *s2);

函数strcat把s2指向的串(包括终止的空字符)的副本添加到s1指向的串的末尾。s2的第一个字符覆盖s1末尾的空字符。
函数strcat返回s1值

2.strcmp

int strcmp(const char *str1, const char *str2)

比较两个字符串的大小。
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。

3.字符数组初始化为空

1、 char a[20] = {0};
2、 char a[20] = " ";
3、 char a[20] = {’\0’};
4、 char a[20]; a[0] = ‘\0’;

第(1)(2)(3)种方式是将str数组的所有元素都初始化为’\0’,而第(4)种方式是只将str数组的第一个元素初始化为’\0’。如果数组的size非常大,那么前两种方式将会造成很大的开销。所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第(4)种方式来初始化字符串数组。

项目部分代码:

 文章大部分是根据查阅大量资料整理而成,若又错误,请在评论区提出来。谢谢大家的阅览。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值