在c语言中读写文件如何查找特定名称的文件?

Python023

在c语言中读写文件如何查找特定名称的文件?,第1张

打开文件,遍历文件内容然后一个一个匹配查找就好了。

下面是一段示例代码:

#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)

}