Objective-C 計算文件夾裏的代碼行數

//
//  main.m
//  計算代碼行數
//
//  Created by waka on 15/7/9.
//  Copyright (c) 2015年 OC. All rights reserved.
//

#import <Foundation/Foundation.h>

NSInteger codeLineCount(NSString *path)// 計算文件夾代碼函數
{
    // 獲得 文件管理者
    NSFileManager *mgr = [NSFileManager defaultManager];
    // 判斷 path 是文件 還是 文件夾
    BOOL dir = NO;// yes 是文件夾 no 不是文件夾
    // 判斷 文件(夾) 是否存在
    BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
    if(!exist)
    {
        NSLog(@"輸入有誤!");
        return 0;// 輸入的文件不存在  結束
    }
    
    if (dir)
    {// 是文件夾
        NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil]; // 把當前文件/夾 裏的東西放到一個數組裏
        int count = 0;// 計代碼數
        for (NSString *fileName in array)// 遍歷數組裏的所有文件/夾
        {
            // 獲得 子文件/夾 的 全路徑
            NSString *fullPath = [NSString stringWithFormat:@"%@/%@",path,fileName];
            count += codeLineCount(fullPath); // 遞歸調用~
        }
        return count;
    }
    else
    {// 不是文件夾
        //判斷 文件擴展名 (把 字符 都轉化成 小寫  好判斷~)
        NSString *extension = [[path pathExtension] lowercaseString];
        if (![extension isEqualToString:@"h"]&&![extension isEqualToString:@"m"])// 計算.h 和 .m 的
        {
            //NSLog(@"文件有誤!");
            return 0;
        }
        // 加載文件內容
        NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        //NSLog(@"%@",content);
        // 計算 有多少個換行
        NSArray *array = [content componentsSeparatedByString:@"\n"];// 函數意思是 把文件 按 什麼(@“...”) 分割
       
        // 遍歷 每一行 輸出
        //    int i=0;
        //    for (NSString *line in array)
        //    {
        //        NSLog(@"%d--%@",i,line);
        //        i++;
        //    }
        
        // 覺得 輸出的文件路徑太長
        NSRange range = [path rangeOfString:@"/Users/waka/Documents/Objective-c/"];// 獲得指定搜索的文件夾
        NSString *str = [path stringByReplacingCharactersInRange:range withString:@""]; // 把路徑輸出爲 空
        
        NSLog(@"%@ - %ld",str,array.count); // 打印 文件路徑及 單個文件代碼行數
        return array.count;

    }

    
}
<pre name="code" class="objc">int main( )
{
    NSInteger count = codeLineCount(@"/Users/waka/Documents/Objective-c/");// 輸入 要查的文件夾路徑
    NSLog(@"%ld",count);
    
    return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章