国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言實現的統計php代碼行數功能源碼(支持文件夾、多目錄)

2020-01-26 15:25:48
字體:
來源:轉載
供稿:網友

放假在家沒事,睡過懶覺,看過電影,就想起來寫個小程序。 統計php代碼的行數,對于phper還是挺實用的。支持單個文件和目錄。下面是代碼和演示的例子!

/** * @date     2012-12-1 * @author bright * @todo     統計php代碼行數 */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <dirent.h>  #include <sys/stat.h>#include <ftw.h>#define LINESIZE 300int fn(const char *file,const struct stat *sb,int flag);int check_file_type(const char * file_name);void read_file(const char *file);int is_file();void print_error();int error_id=0;char *path;const char *FTYPE=".php";const char *flags[]={"<?","<?php"};const char *rflags="?>";int line_sum=0;int file_sum=0;int show_one_file_line=0; //是否顯示每個文件的行數int main(int argc, char *argv[]){    if(argc==1){        printf("請在命令后面添加目錄或文件名!/n");        return 0;    }    if(argc==3 && strcmp(argv[2],"-p")==0){        show_one_file_line=1;    }            path=argv[1];        if(is_file(path)){        if(check_file_type(path)){            read_file(path);        }    }    else{        ftw(path,fn,1000);    }        if(error_id<=3){        print_error();    }    printf("files: %d /ttotal: %d Lines/n",file_sum,line_sum);    return 0;}void read_file(const char *file_path){    char arr[LINESIZE];    int full_code=0;    int line_num=0;        FILE *fp;    fp=fopen(file_path,"r+");        while ((fgets(arr, LINESIZE, fp)) != NULL){        int i=sizeof(flags)/4-1;                if (full_code){            if (strstr(arr,rflags)!=0){                full_code=0;            }            else{                line_num++;            }        }        else{            for (;i>=0;i--){                if (strstr(arr,flags[i])!=0){                    full_code=1;                    break;                }            }        }    }    line_sum+=line_num;    file_sum++;    if(show_one_file_line)        printf("%s/t Lines:%d/t/n",file_path,line_num);}int fn(const char *file,const struct stat *sb,int flag){    if(flag==FTW_F){        if(is_file()==0){            if(check_file_type(file)){                read_file(file);            }        }    }        return 0;}//return 0: 文件; 1:目錄int is_file(){    int i=strlen(path);    for (;i>=0;i--){        if (path[i]=='.'){//文件            if (access(path,F_OK)!=0){                error_id=1;            }            else if (access(path,R_OK)!=0){                error_id=2;            }                    return 1;        }        else if (path[i]=='/'){//目錄            if (access(path,F_OK)!=0){                error_id=3;            }            return 0;        }    }    return 0;}//文件是否為指定格式int check_file_type(const char * file_name){    char *tmp=rindex(file_name,'.');    if(tmp==NULL){        return 0;    }    if(strcmp(tmp,FTYPE)!=0){        error_id=4;        return 0;    }    return 1;}//打印錯誤信息void print_error(){    switch(error_id){    case 1:        printf("該文件不存在!請檢查!/n");    break;    case 2:        printf("您沒有對該文件的讀權限!請檢查!/n");    break;    case 3:        printf("該目錄不存在!請檢查!/n");    break;    case 4:        printf("文件格式格式錯誤,不是%s格式,請重試!/n",FTYPE);    break;    }}

演示例子:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 卢湾区| 龙里县| 武平县| 凉城县| 抚州市| 马公市| 买车| 安吉县| 岐山县| 会理县| 阿合奇县| 太保市| 海兴县| 仙居县| 竹北市| 彝良县| 鄂伦春自治旗| 龙山县| 馆陶县| 南阳市| 林周县| 肥乡县| 嘉定区| 红原县| 丘北县| 黎川县| 岳西县| 平湖市| 德惠市| 丰原市| 铜鼓县| 卢湾区| 荔浦县| 金门县| 融水| 邢台县| 伊宁市| 区。| 沧源| 平顶山市| 长宁县|