linux平臺下基於C語言實現遍歷檔案目錄
阿新 • • 發佈:2019-02-09
#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <time.h> /* 檔案大小和修改時間 */ static int get_file_size_time(const char *filename) { struct stat statbuf; /* 判斷未開啟檔案 */ if(stat(filename,&statbuf)==-1) { printf("Get stat on %s Error: %s\n", filename, strerror(errno)); return(-1); } if(S_ISDIR(statbuf.st_mode)) // 目錄 return(1); if(S_ISREG(statbuf.st_mode)) // 檔案 printf("%s size: %ld bytes\tmodified at %s", filename, statbuf.st_size, ctime(&statbuf.st_mtime)); return(0); } int main(int argc,char **argv) { DIR *dirp; struct dirent *direntp; int stats; if(argc!=2) { printf("Usage: %s filename\n\a", argv[0]); exit(1); } if(((stats=get_file_size_time(argv[1]))==0)||(stats==-1)) // 檔案或出現錯誤 exit(1); /* 開啟目錄 */ if((dirp=opendir(argv[1]))==NULL) { printf("Open Directory %s Error: %s\n", argv[1], strerror(errno)); exit(1); } /* 返回目錄中檔案大小和修改時間 */ while((direntp=readdir(dirp))!=NULL) { /* 給檔案或目錄名新增路徑:argv[1]+"/"+direntp->d_name */ char dirbuf[512]; memset(dirbuf,0,sizeof(dirbuf)); strcpy(dirbuf,argv[1]); strcat(dirbuf,"/"); strcat(dirbuf,direntp->d_name); if(get_file_size_time(dirbuf)==-1) break; } closedir(dirp); exit(1); }