读取当前路径下的.C文件,然后逆序输出文件名

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "windows.h"

typedef struct {
	unsigned int nFileNum;
	unsigned char aFileNum[3];
}tagFile;

int main()
{
	char szPath[MAX_PATH]={0};//用来存放路径
	char szFile[MAX_PATH]={0};//用来存放文件名(含路径)
	HANDLE hFindFile;//文件名柄
	WIN32_FIND_DATA FindData; //文件信息

	FILE* fp;//文件指针
	char szCreatFile[MAX_PATH]={0};//创建临时文件的文件名
	char szOneLine[256]={0};//用来存放读取的一行数据
	tagFile sFile={0,{0}};//用来统计文件数目
	
	if (NULL == GetCurrentDirectory(sizeof(szPath),szPath))//获取当前路径
	{
		printf("PATH error!");
		return 0;
	}
	
	strcpy(szFile,szPath); strcat(szFile,"\\*.c");//得到当前路径下要搜索的文件(可以用通配符)

	hFindFile=FindFirstFile(szFile,&FindData);//找到第一个文件,然后以后可用findnextfile函数
	if (hFindFile==INVALID_HANDLE_VALUE)//出错判断
	{
		printf("No file find!");
		return 0;
	}
	strcpy(szCreatFile,szPath); strcat(szCreatFile,"\\tmp.c");//在当前文件夹下创建一临时文件tmp.c

	if((fp=fopen(szCreatFile,"w"))==NULL)  //打开tmp.c
	{  
		printf("\nerror on open c:\\file_a file!");  
		return 0;
	} 
写入5占位符(如:000\n)///
	sFile.aFileNum[0]=sFile.nFileNum/100+'0';
	sFile.aFileNum[1]=sFile.nFileNum/10%10+'0';
	sFile.aFileNum[2]=sFile.nFileNum%10+'0';
	fprintf(fp,"%s\n",sFile.aFileNum);
//
	while(1)
	{
		if (NULL == strstr(FindData.cFileName,"tmp"))
		{
			sFile.nFileNum++;//找到的文件数目++
			fprintf(fp,"%s\n",FindData.cFileName);//把找到的文件名写入临时文件
			printf("%s\n",FindData.cFileName);
		}
		if(!FindNextFile(hFindFile,&FindData))  //找下一个文件
			break;  
		
	}
/替换开始写入占位数//
	fseek(fp,0,SEEK_SET);
	sFile.aFileNum[0]=sFile.nFileNum/100+'0';
	sFile.aFileNum[1]=sFile.nFileNum/10%10+'0';
	sFile.aFileNum[2]=sFile.nFileNum%10+'0';
	fprintf(fp,"%s",sFile.aFileNum);
	fclose(fp);//关闭临时文件
	FindClose(hFindFile);//关闭文件名柄


以下为读取部分/
以下为读取部分/
以下为读取部分/
以下为读取部分/
	if((fp=fopen(szCreatFile,"r"))==NULL)  
	{  
		printf("\nerror on open c:\\file_a file!");  
		return 0;
	} 
	printf("%s",fgets(szOneLine,sizeof(szOneLine),fp));//读取第一行字符并输出
	sFile.nFileNum=(szOneLine[0]-'0')*100+(szOneLine[1]-'0')*10+szOneLine[2]-'0';

	for (int i=sFile.nFileNum;i>0;--i)
	{
		rewind(fp);//文件指针指向文件首
		//第N条记录数偏移:5+(n-1)*7;
		//占位符是5个,如015(表示一共15个文件),实事上读到的是015\n\r,所以是5个
		//文件名长度为7,例aaa.txt事实上还会读到\n\r所以是7个
		fseek(fp,5+(i-1)*7,SEEK_SET);
		printf("%s",fgets(szOneLine,sizeof(szOneLine),fp));//打印输出
	}
	fclose(fp);//关闭临时文件
	DeleteFile(szCreatFile);//删除临时文件
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值