A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

适合有java和C基础同学迅速了解OC

  1. #import <Foundation/Foundation.h>
  2. #include <stdio.h>
  3. #include "stdlib.h"

  4. /*
  5. 1>找出文件夹下所有的C和OC代码文件及TXT文件,
  6. 计算出这些文件中总共的行数,
  7. 2>将这些文件复制到另一个文件夹
  8.        
  9. */

  10. // 创建文件夹
  11. int cmkdir(char *path,int mode);
  12. //计算 文件或文件夹内文本总行数
  13. int fileLineCount(NSString * path);
  14. //判断是否文本文件
  15. int isTextFile(NSString *path);
  16. //计算文本文件行数
  17. int textLineCount(NSString * path);
  18. //将路径下所有文本文件拷贝到新文件夹
  19. int copyTextFileToDir(NSString *path,NSString *toDir);
  20. //拷贝文本文件
  21. int copyTextFileToFile(NSString *srcPath,NSString *destPath);


  22. int main()
  23. {
  24.         NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  25.        
  26.         NSString * path=@"C:/Users/Administrator/Desktop";
  27.         char * toDir="C:/Users/Administrator/Desktop/codeDir";
  28.         //计算文件夹下文本文件内容总行数
  29.         int count = fileLineCount(path);
  30.         NSLog(@"total lines =%d",count);
  31.        
  32.         // 将文件夹下文本文件复制到某文件夹
  33.         cmkdir(toDir,0777);
  34.         int fileCount=copyTextFileToDir(path,
  35.         [NSString stringWithUTF8String:toDir]);
  36.         NSLog(@"共复制了文本文件个数 =%d",fileCount);
  37.        
  38.         [pool drain];
  39.         return 0;
  40.        
  41. }

  42. int cmkdir(char *path,int mode)
  43. {
  44.         int flag=0;
  45.         //access判断文件是否有给定的存取方式,00表示判断文件是否存在
  46.         //返回0表示 符合给定方式,否则返回-1
  47.         flag=access(path,00);
  48.         //存在直接返回
  49.         if(!flag)
  50.         return flag;
  51.        
  52.         //mkdir(path,mode)  0777为八进制,最大访问权限
  53.         //返回0表示成功,-1表示出错。
  54.          flag = mkdir(path,mode);
  55.         if(flag)
  56.         {
  57.                 printf("创建文件夹失败");
  58.                 getch();
  59.                 exit(1);
  60.         }
  61.         return flag;
  62. }

  63. int copyTextFileToDir(NSString *path,NSString *toDir)
  64. {
  65.         int count=0;
  66.         BOOL isDir,exists;
  67.         NSFileManager *fm=[NSFileManager defaultManager];
  68.         exists = [fm fileExistsAtPath:path isDirectory:&isDir];
  69.         if(!exists) return count;
  70.         if(isDir)
  71.         {
  72.                 NSArray *files=[fm contentsOfDirectoryAtPath:path error:nil];
  73.                 int idx ;
  74.                 for(idx=0;idx<[files count];idx++)
  75.                 count+=copyTextFileToDir([NSString stringWithFormat:
  76.                 @"%@/%@",path,[files objectAtIndex:idx]],toDir);
  77.                
  78.         }else
  79.         {
  80.                 if(isTextFile(path))
  81.                 {
  82.                         // 是文本文件,则按照原来文件名称复制到新文件夹
  83.                         NSArray *ary = [path componentsSeparatedByString:@"/"];
  84.                         count=copyTextFileToFile(path,[NSString stringWithFormat:
  85.                         @"%@/%@",toDir,[ary objectAtIndex:[ary count]-1]]);
  86.                 }
  87.         }
  88.         return count;
  89. }

  90. int copyTextFileToFile(NSString *srcPath,NSString *destPath)
  91. {
  92.         NSString *content = [NSString stringWithContentsOfFile:srcPath];
  93.         return [content writeToFile:destPath atomically:YES];
  94. }

  95. int fileLineCount(NSString *path)
  96. {
  97.         int count=0;
  98.         BOOL isDir,exists;
  99.         NSFileManager *fm=[NSFileManager defaultManager];
  100.         exists=[fm fileExistsAtPath:path isDirectory:&isDir];
  101.        
  102.         if(exists&&isDir)
  103.         {
  104.                 // 返回文件名的OC数组
  105.                 NSArray *files=[fm contentsOfDirectoryAtPath:path error:nil];
  106.                 int idx;
  107.                 for(idx=0;idx<[files count];idx++)
  108.                 // 返回的仅仅是文件名,需要跟路径拼接成全路径名
  109.                         count+=fileLineCount([NSString stringWithFormat:@"%@/%@",
  110.                         path,[files objectAtIndex:idx]]);
  111.                
  112.         }else if(exists)
  113.         {
  114.                 if(isTextFile(path))
  115.                 {
  116.                         count=textLineCount(path);
  117.                         //将查找到的字符串替换成空字符串                       
  118.                         NSString *shortPath=[path stringByReplacingOccurrencesOfString:
  119.                         @"C:/Users/Administrator/" withString:@""];
  120.                         NSLog(@"%@---%d",shortPath,count);
  121.                 }       
  122.         }
  123.         return count;
  124.        
  125.        
  126. }
  127. int isTextFile(NSString *path)
  128. {
  129.         NSString *extension=[[path pathExtension] lowercaseString];
  130.         NSArray *extensionAry=[NSArray arrayWithObjects:
  131.         @"m",@"c",@"cpp",@"txt",@"h",nil];
  132.         //拓展名是其中任何一个就是文本文件
  133.         BOOL flag=0;//默认不是
  134.         int idx;
  135.         for(idx=0;idx<[extensionAry count]&&!flag;idx++)
  136.         {
  137.                 flag=[extension isEqualToString:[extensionAry objectAtIndex:idx]];
  138.         }
  139.         return flag;
  140.                
  141. }
  142. int textLineCount(NSString * path)
  143. {       
  144.         NSString *content=[NSString stringWithContentsOfFile:path];
  145.         //以\n来分割字符串
  146.         NSArray * ary=[content componentsSeparatedByString:@"\n"];
  147.         /*
  148.         int i;
  149.         for(i=0;i<[ary count];i++)
  150.                 NSLog(@"%d--%@",i,[ary objectAtIndex:i]);
  151.                 */
  152.         return [ary count];
  153. }
复制代码




NSFileManager:
        提供了文件操作的方法,本身是单例模式;
     //获取方法
  +(id)defaultManager;
    //返回file是否存在 和 file是否是dir
  -(BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDir;
    //返回path下所有文件及文件夹的名称,以NSArray保存这些NSString
  -(NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError *__autoreleasing*)error;


NSString 中常用的文件操作相关方法:
                //取得文件扩展名,即最后一个点之后的字符串(不包括点)
        -(NSString *)pathExtension;
          //字符串比较
        -(BOOL)isEqualToString:(NSString *)otherStr;
          //英文部分转小写
        -(NSString *)lowercaseString;
                //转大写
        -(NSString *)uppercseString;
          //将range内的字符替换成新字符
        -(NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)rep;
                //将字符串出现的 串替换成新串
        -(NSString *)stringByReplacingOccurrencesOfString:(NSString *)oStr withString:(NSString *)newStr;
                //split
        -(NSArray *)componentsSeparatedByString:(NSString *)separator;
       



4 个回复

倒序浏览
没JAVA基础。。。。就会C
回复 使用道具 举报
赞赞赞赞赞赞赞赞
回复 使用道具 举报
这是你自学的啊,还是基础视频中的内容,我怎么没学这部分内容?
回复 使用道具 举报
紫荆秋雪 发表于 2015-8-6 20:59
这是你自学的啊,还是基础视频中的内容,我怎么没学这部分内容?

基础视频不是讲过一个统计代码行数的例子么?
我根据这个稍微改动了下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马