C语言实现遍历指定路径下的所有文件(Visual Studio 2015环境编写)

  • 1. main()函数部分:获取当前程序运行路径,将其整理传递给主要功能函数。
int main( int argc, char * argv[] )
{
	byte pcFolderPath[CUR_PATH_MAX] = { '\0' };
	uint32 u32Circle = 0;
	uint32 u32FolderPathLen = 0;  //当前程序运行的文件夹路径偏移



	/* 遍历路径字符串,获取程序运行的路径(不包括程序名称) */
	if ( argc < 1 )
	{
		printf( "argc参数错误!!!\n" );
		system( "pause" );
		return 0;
	}
	u32Circle = 0;
	while (1)
	{
		if ( argv[0][u32Circle] == '\\' || argv[0][u32Circle] == '/' )
		{
			u32FolderPathLen = u32Circle;
			u32FolderPathLen++;
		}
		else if ( argv[0][u32Circle] == '\0' )  //如果路径字符串到了终点
		{
			break;
		}
		u32Circle++;
	}
	memcpy( pcFolderPath, argv[0], u32FolderPathLen );



	/* 打开用于记录结果的文件 */
	g_pfWrite = fopen( "result.txt", "w" );
	if ( g_pfWrite == NULL )
	{
		printf( "打开文件result.txt失败\n" );
		return 0;
	}



	view( pcFolderPath, u32FolderPathLen );

	fclose( g_pfWrite );
	printf("程序结束!!!\n");
	getchar();

	return 0;
}
  • 2.view()函数部分:实现指定路径下遍历所有文件,并将结果保存到文本文件中和显示到控制台窗口。
void view( byte *pcTmp, uint32 u32TmpLen )
{
	struct _finddata_t stFileInfo;
	long lHandle = 0;
	byte pcPath[CUR_PATH_MAX] = { '\0' };
	uint32 u32Len = 0;
	byte cFileNameLen = 0;


	memcpy( pcPath, pcTmp, u32TmpLen );
	u32Len = u32TmpLen;

	pcPath[u32Len++] = '*';
	pcPath[u32Len++] = '.';
	pcPath[u32Len++] = '*';

	lHandle = (long)_findfirst( pcPath, &stFileInfo  );  //找到第一个文件
	if (lHandle == -1)
	{
		return ;
	}

	pcPath[--u32Len] = '\0';
	pcPath[--u32Len] = '\0';
	pcPath[--u32Len] = '\0';
	do 
	{
		/*  得到文件或文件夹的完整路径 */
		cFileNameLen = 0;
		while (1)
		{
			if (stFileInfo.name[cFileNameLen] == '\0')
			{
				break;
			}
			cFileNameLen++;
		}
		memcpy(pcPath + u32Len, stFileInfo.name, cFileNameLen);
		pcPath[u32Len + cFileNameLen] = '\0';

		/* 根据文件信息结构体的性质判断文件还是文件夹,文件夹的话就需要进一步分析,递归调用 */
		if (stFileInfo.attrib & _A_SUBDIR) //是目录
		{
			if ( stFileInfo.name[0] == '.' && stFileInfo.name[1] == '\0' )  //当文件夹是“.”
			{
				continue;
			}
			if ( stFileInfo.name[0] == '.' && stFileInfo.name[1] == '.' && stFileInfo.name[2] == '\0' )  //当文件夹是“..”
			{
				continue;
			}
			pcPath[u32Len+cFileNameLen] = '\\';
			view( pcPath, u32Len+cFileNameLen+1 );
		}
		else  //是文件
		{
			fprintf(g_pfWrite, "%s", pcPath);
			printf( "%s\n", pcPath );
		}
	} while (_findnext(lHandle, &stFileInfo) == 0);
	_findclose(lHandle);

	return;
}

3.外围定义和头文件包含等

#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS

#include<time.h>
#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include <stdlib.h>
#include <windows.h>
#include <direct.h>
#include <io.h>
#include <string.h>



typedef    unsigned char  byte;   //表示字符
typedef    unsigned int   uint32; //无符号32位整型

#define CUR_PATH_MAX  300

FILE *g_pfWrite = NULL;
byte pcFisrtName[50] = { '\0' };  //存放

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值