欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)的統(tǒng)計php代碼行數(shù)功能源碼(支持文件夾、多目錄)

 更新時間:2014年08月05日 10:55:33   投稿:junjie  
這篇文章主要介紹了C語言實現(xiàn)的統(tǒng)計php代碼行數(shù)功能源碼,支持文件夾、多級目錄的統(tǒng)計,在一些環(huán)境中會用到這個功能,需要的朋友可以參考下

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

/**
 * @date     2012-12-1
 * @author bright
 * @todo     統(tǒng)計php代碼行數(shù)
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <dirent.h>  
#include <sys/stat.h>
#include <ftw.h>
#define LINESIZE 300

int 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; //是否顯示每個文件的行數(shù)

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("您沒有對該文件的讀權(quán)限!請檢查!\n");
    break;
    case 3:
        printf("該目錄不存在!請檢查!\n");
    break;
    case 4:
        printf("文件格式格式錯誤,不是%s格式,請重試!\n",FTYPE);
    break;
    }
}

演示例子:

相關(guān)文章

  • C++事件驅(qū)動型銀行排隊模擬

    C++事件驅(qū)動型銀行排隊模擬

    這篇文章主要為大家詳細(xì)介紹了C++事件驅(qū)動型銀行排隊模擬,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表存儲詳解

    C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表存儲詳解

    鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。本文將和大家一起聊聊C語言中單鏈表的存儲,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • C語言實現(xiàn)掃雷附完整代碼

    C語言實現(xiàn)掃雷附完整代碼

    本文詳細(xì)講解了C語言實現(xiàn)掃雷并附完整代碼,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • C語言中指針常量和常量指針的區(qū)別

    C語言中指針常量和常量指針的區(qū)別

    本文主要介紹了C語言中指針常量和常量指針的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言練習(xí)之?dāng)?shù)組中素數(shù)交換

    C語言練習(xí)之?dāng)?shù)組中素數(shù)交換

    這篇文章主要為大家介紹了C語言數(shù)組中素數(shù)交換,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • C語言深入探究sizeof與整型數(shù)據(jù)存儲及數(shù)據(jù)類型取值范圍

    C語言深入探究sizeof與整型數(shù)據(jù)存儲及數(shù)據(jù)類型取值范圍

    在main函數(shù)中,sizeof是可以正常工作的,但是在自定義函數(shù)中就不可以了。所以本文將為大家詳細(xì)講解一下關(guān)鍵字sizeof、整型數(shù)據(jù)存儲深入、數(shù)據(jù)類型取值范圍深入
    2022-07-07
  • C++中auto_ptr智能指針的用法詳解

    C++中auto_ptr智能指針的用法詳解

    這篇文章主要介紹了C++中auto_ptr智能指針的用法詳解的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • C語言進(jìn)階二叉樹的基礎(chǔ)與銷毀及層序遍歷詳解

    C語言進(jìn)階二叉樹的基礎(chǔ)與銷毀及層序遍歷詳解

    朋友們好,這篇播客我們繼續(xù)C++的初階學(xué)習(xí),現(xiàn)在對我們對C++的二叉樹基礎(chǔ)oj與二叉樹銷毀和層序遍歷進(jìn)行練習(xí),讓我們相互學(xué)習(xí),共同進(jìn)步
    2022-06-06
  • C語言實現(xiàn)英文單詞助手

    C語言實現(xiàn)英文單詞助手

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)單詞小助手,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++設(shè)計模式之策略模式(Strategy)

    C++設(shè)計模式之策略模式(Strategy)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計模式之策略模式Strategy ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評論