linux下面 A Demo written by camelrain /* the program find a file from current directory or your defined directory commond optinon [path] filename */ #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <pwd.h> #include <unistd.h> #include <stdio.h> #include <string.h> #define LENGTH 256 /* just if is a directory*/ static int IsDir (char * name); /* search target file, arg1 is current path, arg2 is target file*/ static void search_file (char * path, char * name); static int search_flag=0; /*just if is a directory*/ static int IsDir (char * name) { struct stat buff; if (lstat(name,&buff) <0) return 0; //if not exist name ,ignore /*if is directory return 1 ,else return 0*/ return S_ISDIR(buff.st_mode); } /*search target file*/ static void search_file (char * path, char * name) { DIR *directory; struct dirent * dir_entry; char buffer[LENGTH]; if ((directory=opendir(path)) == NULL) { fprintf(stderr, "%s ", path); perror( " "); return; } while (dir_entry=readdir(directory)) { if (!strcmp(dir_entry-> d_name, ". ")||!strcmp(dir_entry-> d_name, ".. ")) { /* do nothing*/ } else { /* if is boot directory add "/ " */ if ((strcmp(path, "/ "))==0) sprintf(buffer, "%s%s ",path,dir_entry-> d_name); /* if is not boot directory do not add "/ "*/ else sprintf(buffer, "%s/%s ",path,dir_entry-> d_name); //printf( "Now file : %s/n ",buffer); if (IsDir(buffer)) search_file (buffer , name); else { if (strcmp(dir_entry-> d_name,name)==0) { printf( "%s/n ",buffer); search_flag=1; } } } } closedir(directory); } int main(int argc, char *argv[]) { static char * current_dir; static char * filename; int length; if (argc==1) { printf( "A few parameters!!/n "); return 0; } if (argc==2) { current_dir=(char * )getcwd(current_dir,LENGTH); filename=argv[1]; } if (argc==3) { length=strlen(argv[1]); if (length> 1 && (argv[1][length-1]== '/ ')) { argv[1][length-1]= '/0 '; //printf( "%d/n ",strlen(argv[1])); } current_dir=argv[1]; filename=argv[2]; } search_file(current_dir,filename); if (!search_flag) printf( "Not found this(%s) file!/n ",filename); return 0; } WINAPI long handle; struct _finddata_t filestruct; char path_search[_MAX_PATH]; handle = _findfirst( "目录 ",&filestruct); if((handle == -1)) return; if( ::GetFileAttributes(filestruct.name)& FILE_ATTRIBUTE_DIRECTORY ) { if( filestruct.name[0] != '. ' ) { _chdir(filestruct.name); Search_Directory(szFilename); _chdir( ".. "); } } else { if( !stricmp(filestruct.name, szFilename) ) { strcat(path_search, "// "); strcat(path_search,filestruct.name); MessageBox(path_search); } } while(!(_findnext(handle,&filestruct))) { if( ::GetFileAttributes(filestruct.name) &FILE_ATTRIBUTE_DIRECTORY ) { if(*filestruct.name != '. ') { _chdir(filestruct.name); Search_Directory(szFilename); _chdir( ".. "); } else { if(!stricmp(filestruct.name,szFilename)) { _getcwd(path_search,_MAX_PATH); strcat(path_search, "// "); strcat(path_search,filestruct.name); MessageBox(path_search); } } } _findclose(handle); }