C語言 通過遞迴 、_findfirst、_findnext函式實現 搜尋指定目錄的指定檔案
阿新 • • 發佈:2019-02-20
主要使用:_findfirst、_findnext函式
OperateFile.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <io.h> #include "FileOpreation_PYJ.h" int main() { char tempChar1[100]={0}; char tempChar2[100]={0}; printf("\nInput folder to search:"); gets(tempChar1); printf("\nInput file to search:"); gets(tempChar2); if(SearchFileInFolder(tempChar1,tempChar2)==0) printf("No such file\n"); }
FileOpreation_PYJ.h
#include <stdlib.h> /*************************************** *函式名:SearchFileInFolder *函式功能描述:搜尋指定目錄下,對應檔案,可進入子目錄搜尋 *函式引數:tempFolder-指定目錄,tempFile-檔案 *函式返回值:0-不成功,資料夾不存在\不能開啟,1-搜尋成功 *作者:龐一江 *函式建立日期 :2018-02-02 ***************************************/ int SearchFileInFolder(char* tempFolder,char* tempFile) { struct _finddata_t *FolderProperties,*FileProperties; long folderHandle=0,fileHandle=0; char *tempDeepFolder=NULL; char *tempPath1=NULL,*tempPath2=NULL; FolderProperties=(struct _finddata_t*)malloc(sizeof(struct _finddata_t)); FileProperties=(struct _finddata_t*)malloc(sizeof(struct _finddata_t)); tempPath1=(char*)realloc(tempPath1,(strlen(tempFolder)+2+1)*sizeof(char)); tempPath2=(char*)realloc(tempPath2,(strlen(tempFolder)+1+strlen(tempFile)+1)*sizeof(char)); memset(tempPath1,0,(strlen(tempFolder)+2+1)*sizeof(char)); memset(tempPath2,0,(strlen(tempFolder)+1+strlen(tempFile)+1)*sizeof(char)); strcat(strcat(tempPath1,tempFolder),"\\*\0"); strcat(strcat(strcat(tempPath2,tempFolder),"\\\0"),tempFile); //*(tempPath1+strlen(tempFolder)+2)='\0'; //*(tempPath2+strlen(tempFolder)+1+strlen(tempFile))='\0'; if((folderHandle=_findfirst(tempPath1,FolderProperties))==-1) { printf("folder %s is not exist\n",tempFolder); return 0; } else //若資料夾存在 { //顯示當前目錄下所以符合條件的檔案 if((fileHandle=_findfirst(tempPath2,FileProperties))!=-1) { printf("%s\\",tempFolder); printf("%s\n",FileProperties->name); while(_findnext(fileHandle,FileProperties)==0) { printf("%s\\",tempFolder); printf("%s\n",FileProperties->name); } } //若為目錄,則進入目錄 while(_findnext(folderHandle,FolderProperties)==0) { if(((FolderProperties->attrib)&_A_SUBDIR)==_A_SUBDIR) //若為目錄 { if((strcmp(FolderProperties->name,".."))!=0&&(strcmp(FolderProperties->name,"."))!=0) { //memset(tempDeepFolder,0,100*sizeof(char)); tempDeepFolder=(char*)realloc(tempDeepFolder,(strlen(tempFolder)+1+strlen(FolderProperties->name)+1)*sizeof(char)); memset(tempDeepFolder,0,(strlen(tempFolder)+1+strlen(FolderProperties->name)+1)*sizeof(char)); strcat(strcat(strcat(tempDeepFolder,tempFolder),"\\\0"),FolderProperties->name); //*(tempDeepFolder+strlen(tempFolder)+1+strlen(FolderProperties->name))='\0'; SearchFileInFolder(tempDeepFolder,tempFile); } } } return 1; } }
實現結果如下: