天天看點

OBject-C加強 代碼總行數計算-項目實作

#import <Foundation/Foundation.h>

// 計算單個檔案代碼行數

int codeLineCount(NSString *path)

{

    // 1.獲得檔案管理者

    NSFileManager *mgr = [NSFileManagerdefaultManager];

    // 2. 判斷path是檔案夾還是檔案路徑

    BOOL dir = NO; //  标記是否為檔案夾

    // 這個路徑是否存在

    BOOL  exist = [mgr fileExistsAtPath:path isDirectory:&dir];

    // 3 . 如果不存在 , 直接傳回 0

    if ( !exist ) return 0;

    // 4 . 說明路徑存在

    if (dir)

    { // 是檔案夾

        //  NSLog(@"是個檔案夾");

        // 裝着目前檔案夾這面的所有内容 (檔案夾 , 檔案)

        NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];

//        NSLog(@"%@",array);

        int count = 0;

        // 周遊數組中的所有檔案 (夾) 名

        for (NSString *filenamein array)

        {   

            // 子檔案 (夾) 的全路徑

           NSString *fullPath = [NSStringstringWithFormat:@"%@/%@",path,filename];

//            NSLog(@"%@",fullPath);

            // 累加每個子路徑的總行數

            count += codeLineCount(fullPath);

        }

        return count;

    }

    else 

    { // 檔案

        // 1 . 判斷檔案的拓展名 ( 忽略大小寫 )

        NSString *extension = [[path pathExtension] lowercaseString];

        if( ! [extension isEqualToString:@"h"] && [extension isEqualToString:@"m" ] && [extension isEqualToString:@"c"])

        {

            // 檔案拓展名不是.h, 也不是.m ,而且也不是.c

            return  0;

        }

//        NSLog(@"%@",extension);

        // 2.加載檔案内容

        NSString *content = [NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];

        //  NSLog(@"%@",content);

        // 3.将檔案切割為每一行

        NSArray *array = [content componentsSeparatedByString:@"\n"];

        NSRange range = [pathrangeOfString:@"/Users/yahua/Desktop/Work/"];

        // 将備援的路徑range 不顯示在輸出檔案中

        NSString *str = [pathstringByReplacingCharactersInRange:range withString:@""];

        NSLog(@"%@ - %ld",str , array.count);

        return array.count;

    }

}

int main(int argc,const char * argv[]) {

    //codeLineCount輸入你檔案 (夾) 路徑

     int count =codeLineCount(@"/Users/yahua/Desktop/Work/");

    NSLog(@"%d",count);

    return 0;

}