今天来分享一下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)种方式来初始化字符串数组。
项目部分代码:
文章大部分是根据查阅大量资料整理而成,若又错误,请在评论区提出来。谢谢大家的阅览。