文件查看器(c++)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/j1137573560/article/details/83045795

第2关:文件查看器

挑战任务

参加“绿盟杯”竞赛的小红遇到一个问题,她想要编写代码实现一个文件查看器,要实现指定文件夹下所有文件以及文件夹目录结构的展示。

你来帮她实现这个功能吧。

编程要求

编程实现对给定文件夹目录结构的展示,如果是文件夹则在其名字之前加上+--若是文件则加上--,上级目录与下级目录、下级文件用两个空格作为间隔,同级下依照文件夹、文件的首字母顺序依次打印;补充完善右侧代码区中的showDirStructure(char *folderPath)函数实现要求的功能,其中函数参数含义如下:

  • folderPath:指定要显示的文件夹

测试说明

样例1

输入:src/step2/root

输出:

样例2

输入:src/step2/dir

输出:

提示: 在C语言中使用readdir函数可以获取目录内容,使用stat函数判断文件类型。

你可以通过如下链接下载本关涉及到的目录文件:
https://www.educoder.net/attachments/download/200773/step2Dir.zip


开始挑战吧,祝你成功!

/***************************
 * 函数功能: 遍历文件夹
 * return: void
 * @para folderPath: 文件夹路径
***************************/
void showDirStructure(char *folderPath)
{
	/********** BEGIN **********/
	static int floor=0;	//层数
	
	for(int i=0;i<floor*2;i++)
		cout<<" ";	//输出前置空格
	char buf[256];
	int len=0;
	
	for(int i= strlen(folderPath)-1;folderPath[i]!='/';i--) 
		buf[len++]=folderPath[i];
	buf[len]='\0';
	for(int i=0;i<len/2;i++){
		char t=buf[i];
		buf[i]=buf[len-1-i];
		buf[len-1-i]=t;
	}
	cout<<"+--"<<buf<<endl;
	
	DIR *dir=opendir(folderPath);
	struct dirent *i=NULL;
	
	while((i=readdir(dir))!=NULL){
		if(!strcmp(i->d_name,".")||!strcmp(i->d_name,".."))
			continue;
		strcpy(buf,folderPath);
		strcat(buf,"/");
		strcat(buf,i->d_name);
		
		struct stat M;
		stat(buf,&M);
		
		if(S_ISDIR(M.st_mode))
		{
			floor+=1;
			showDirStructure(buf);
			floor-=1;
		}
		else
		{
			if(S_ISREG(M.st_mode)){
				char ext[256];
				len=0;
				for(int j=strlen(buf)-1;buf[j]!='.';j--)
					ext[len++]=buf[j];
				ext[len]='\0';
				for(int j=0;j<len/2;j++){
					char t=ext[j];
					ext[j]=ext[len-1-j];
					ext[len-1-j]=t;
				}
				if(!strcmp(ext,"jpg")||!strcmp(ext,"png")||!strcmp(ext,"bmp")){
					for(int j=0;j<(floor+1)*2;j++)
						cout<<" ";
					cout<<"--"<<i->d_name<<endl;
				}
			}
		}
	}
	closedir(dir);
	
	/********** END **********/
}

猜你喜欢

转载自blog.csdn.net/j1137573560/article/details/83045795