打开文件,遍历文件内容然后一个一个匹配查找就好了。
下面是一段示例代码:
#include<stdio.h>
#include<string.h>
#include<dir.h>
#define SIZE 12
void find_creat_file(char *)
int main(void)
{
char filename[SIZE]
strcpy(filename,"filename")
find_creat_file(filename)
getch()
return 0
}
void find_creat_file(char *filename)
{
struct ffblk ffblk
int done
done=findfirst("d:\\filename",&ffblk,0)
if(done==0)
return 0
else
mkdir("d:\\filename")
}
//***************全盘搜索指定文件*******************//**************************************************
//**使用递归来搜索文件,效率低,使用多线程效果更好**
//**************************************************
#include<stdio.h>
#include<windows.h>
void FindFile(char*,char*)
int count=0//统计文件数
char fname[32]
#define BUFSIZE 256
int main(int argc,char*argv[])
{
char szLogicalDriveStrings[BUFSIZE]
DWORD iLength
int iSub
printf("请输入要搜索的文件名")
scanf("%s",fname)
ZeroMemory(szLogicalDriveStrings, BUFSIZE)
iLength = GetLogicalDriveStringsA(BUFSIZE-1, szLogicalDriveStrings)
for(iSub=0iSub<iLengthiSub+=4)
{
//如果不是固定磁盘驱动器:本地硬盘或移动硬盘,忽略
if(GetDriveType(szLogicalDriveStrings+iSub)!=3)
continue
FindFile(szLogicalDriveStrings+iSub,"*.*")
}
printf("一共发现%d个文件..\n",count)
scanf("%*d")
return 0
}
void FindFile(char*pfilename,char*pfilter)
{
WIN32_FIND_DATA findfiledate
HANDLE hfind
char filename[512]
char ipFileName[512]
char _ipFileName[512]
int i
int result
for (i=0*(pfilename+i)!='\0'i++)
filename[i]=*(pfilename+i)
filename[i]='\0'
//如果最后一个字符不是‘\’
if(filename[strlen(filename)-1]!='\\')
strcat(filename,"\\")//添加"\"
strcpy(ipFileName,filename)
strcat(ipFileName,pfilter)
hfind=FindFirstFile(ipFileName,&findfiledate)
if(hfind==INVALID_HANDLE_VALUE)
return
do
{
//如果不是目录
if(!(findfiledate.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
{
//如果找到指定文件
if(0==strcmp(fname,findfiledate.cFileName))
{
printf("%s%s\n",filename,findfiledate.cFileName)
count++
}
}
//如果是目录
else
{
//.和..不输出
if(findfiledate.cFileName[0]!='.')
{
strcpy(_ipFileName,filename)
strcat(_ipFileName,findfiledate.cFileName)
FindFile(_ipFileName,pfilter)//递归
}
}
}while(FindNextFile(hfind,&findfiledate))//FindNextFile返回为真,继续搜索
FindClose(hfind)
return
}
非原作者
//读数#include<stdio.h>
#include<stdlib.h>
#define N 20
struct stud
{
int num
int sco1
int sco2
int sco3
}stu[N]
void main()
{
FILE *fp
double ave
int i=0,x
if((fp=fopen("STUDENT.DAT","r"))==NULL)
{
printf("无法打开该文件!\n")
exit(0)
}
else
printf("文件打开成功!\n")
for(i=0i<Ni++){
fread(&stu[i],sizeof(struct stud),1,fp)
i++
}
fclose(fp)
printf("请输入要查找的学生学号:\n")
scanf("%d",&x)
for(i=0i<Ni++)
{
if(x==stu[i].num)
{
ave=(double)(stu[i].sco1+stu[i].sco2+stu[i].sco3)/3.0
break
}
else
i++
}
if(i==10||ave<0||ave>100)
printf("查无该生成绩!\n")
else
printf("该生平均成绩为:%.2lf\n",ave)
}
//存数
#include<stdio.h>
#include<stdlib.h>
#define N 20
struct stud
{
int num
int sco1
int sco2
int sco3
}stu[N]
void main()
{
FILE *fp
int i,n
float sum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0
if((fp=fopen("STUDENT.DAT","wb"))==NULL)
{
printf("无法打开该文件!\n")
exit(0)
}
else
printf("文件打开成功!\n")
printf("请输入要输入的学生数:\n")
scanf("%d",&n)
for(i=0i<ni++)
{
printf("请输入学生学号,数学成绩,政治成绩和英语成绩:\n")
scanf("%d%d%d%d/n",&stu[i].num,&stu[i].sco1,&stu[i].sco2,&stu[i].sco3)
sum1+=stu[i].sco1
sum2+=stu[i].sco2
sum3+=stu[i].sco3
if(fwrite(&stu[i],sizeof(struct stud),1,fp)!=1)
printf("file write error\n")
}
fclose(fp)
ave1=sum1/n
ave2=sum2/n
ave3=sum3/n
printf("------------------------------------\n")
printf("NUM Math Prolitics English\n")
for(i=0i<ni++)
{
printf("%d%7d%10d%14d\n",stu[i].num,stu[i].sco1,stu[i].sco2,stu[i].sco3)
}
printf("------------------------------------\n")
printf("对应三门成绩均分为:\n")
printf(" %7.2f%10.2f%14.2f\n",ave1,ave2,ave3)
}