#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;
}
读取当前路径下的.C文件,然后逆序输出文件名
最新推荐文章于 2023-05-06 13:11:20 发布