【C/C++】【Linux&Windows】Windows系统下的文件夹扫描与Linux系统下的实现比较

26 篇文章 0 订阅
15 篇文章 0 订阅

1Windows 系统下实现文件夹下的文件扫描

实现代码如下:

 
#include <stdio.h>
#include <string.h>
#include <io.h>

#define TestFolderPath "./"

void ScanFolder(const char* folder_path);

int main(int argc,char* argv[])
{
	ScanFolder(TestFolderPath);

	return 0;
}
/**
  文件夹下的文件扫描(Windows system)
@param folder_path 文件夹路径
*/
void ScanFolder(const char* folder_path)
{
	_finddata_t file;
	long lf;

	char tempStr[256];
	strcpy(tempStr,folder_path);
	strcat(tempStr,"*.*");

    if((lf = _findfirst(tempStr, &file))!=-1)    
	{
		while( _findnext(lf,&file) == 0)
		{
			if(strcmp(file.name,"..")==0)
			{
				continue;
			}
			if(file.attrib == _A_SUBDIR)
			{
				char tTempStr[256];
				strcpy(tTempStr,folder_path);
				strcat(tTempStr,file.name);
				strcat(tTempStr,"/");
				//fprintf(stdout,"%s\n",tTempStr);
				ScanFolder(tTempStr);
			}
			else
			{
				fprintf(stdout,"%s%s\n",folder_path,file.name);
				/*unsigned int type = file.attrib;
				if(type == _A_NORMAL)
					fprintf(stdout,"普通文件\n");
				else if(type == _A_RDONLY)
					fprintf(stdout,"只读文件\n"); 
				else if(type == _A_HIDDEN)
					fprintf(stdout,"隐藏文件\n"); 
				else if(type == _A_SYSTEM)
					fprintf(stdout,"系统文件\n"); 
				else
					fprintf(stdout,"存档文件\n"); 
					*/
			}
		}
	}
	_findclose(lf); 
}

2、Linux系统下实现文件夹下文件的扫描

实现代码如下:

 
/*
  $Id:ScanFolder.c,2012/06/10 17:53:29 sine Exp$
*/
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>

#define FolderPath "./"

void scan_folder(const char* folder_path);

int main(int argc,char* argv[])
{
	scan_folder(FolderPath);

	return 0;
}
/**
  文件夹下文件扫描实现
@param folder_path 文件夹的路径
*/
void scan_folder(const char* folder_path)
{
	/*
		打开一个目录并建立一个目录流,返回一个指向DIR结构的指针,
		该指针用于读取目录数据项.
	*/
	DIR* dp = opendir(folder_path);
	if(NULL == dp)
	{
		fprintf(stderr,"cannot open directory:%s\n",folder_path);
		return ;	
	}

	struct dirent *entry;
	struct stat statbuf;

	chdir(folder_path);//cd目录切换
	/*
		readdir,返回一个指针,指针指向的结构里保存着目录流中下一个目录项的有关资源。
		后续的readdir调用将返回后续的目录项.
	*/
	while(NULL != (entry = readdir(dp)))
	{
		lstat(entry->d_name,&statbuf);	

		if(S_ISDIR(statbuf.st_mode))
		{
			if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0)
			{
				continue;	
			}
			char tempStr[256];
			strcpy(tempStr,folder_path);
			strcat(tempStr,entry->d_name);
			strcat(tempStr,"/");
			//fprintf(stdout,"before:%s\n",tempStr);
			scan_folder(tempStr);
		}
		else
		{
			fprintf(stdout,"%s%s\n",folder_path,entry->d_name);	
		}
	}
	chdir("..");

	closedir(dp);//关闭一个目录流并释放与之关联的资源
}

运行结果:

./Josephus.c

./ScanFolder.c

./Josephus

./readme.txt

./a.out

./test/test.txt

./Makefile


到此,我们就介绍完了两种系统下的文件夹扫描的实现,在这里写下这个,主要是方便以后应用时有个参考。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值