• 用程序删除工程中多余的图片


      最近无意中发现工程中有许多没有用到的图片,这些图片导致了工程的体积庞大,因此想将这些没有用到的图片找出来并将其删除。开始是通过人肉手动删除,删除花费了很长的时间,但这样做能够确保准确无误。后来想换一种方式删除图片,这种方式就是写个程序删除多余的图片。下面谈一谈整体思路。

      首先,将工程中的所有文件包括文件夹下的文件全部找出来,用一个数组保存这些路径。

      其次,通过Assets(我一般将图片存放在这个文件中)找出所有的图片,并将这些图片的地址保存起来。

      然后,将所有的.m文件找出并且找出所有的图片。在寻找图片的时候,我发现了一个问题,一般添加图片的方法是通过imageNamed:@"",但是有时候我们会通过变量添加图片,这时候这种方式就不能够找到所有的图片。但目前对我而言只能找到通过这种方式使用的图片名,以后有机会我将完善这个程序,争取能够找出所有使用的图片。

      最后,比较两个存放图片名的数组,找出没有使用的图片名。

      下面是源码,有需要的可以看看。

     1 #import "LMFFindAllFile.h"
     2 
     3 @implementation LMFFindAllFile
     4 #pragma mark --返回所有的文件列表
     5 + (NSArray *)findAllFileWithFileName:(NSString *)fileName
     6 {
     7     NSArray *fileNameListArray;
     8     NSFileManager *fileManager = [NSFileManager defaultManager];
     9     //判断文件是否存在
    10     if ([fileManager fileExistsAtPath:fileName])
    11     {
    12         NSError *error = nil;
    13         fileNameListArray = [fileManager subpathsOfDirectoryAtPath:fileName error:&error];
    14     }
    15     return fileNameListArray;
    16 }
    17 @end
     1 #import "LMFFindAllPicture.h"
     2 
     3 @implementation LMFFindAllPicture
     4 #pragma mark --找出所有的图片的路径并将其保存在一个数组中
     5 + (NSArray *)findAllPicture:(NSArray *)fileNameList
     6 {
     7     NSMutableArray *fileNameArray = [NSMutableArray array];
     8     NSMutableArray *filePathArray = [NSMutableArray array];
     9     NSMutableArray *array = [NSMutableArray array];
    10     for (NSString *str in fileNameList)
    11     {
    12         if ([str containsString:@"ailian"])
    13         {
    14             NSArray *smallArray = [str componentsSeparatedByString:@"/"];
    15             if ([smallArray count] >= 3)
    16             {
    17                 NSString *temp = [smallArray objectAtIndex:1];
    18                 if ([temp isEqualToString:@"Assets.xcassets"])
    19                 {
    20                     NSString *subStr = [smallArray objectAtIndex:2];
    21                     NSRange range = [subStr rangeOfString:@"."];
    22                     if (range.location != NSNotFound)
    23                     {
    24                         NSString *fileName = [subStr substringToIndex:range.location];
    25                         if ([fileNameArray count])
    26                         {
    27                             if (![fileNameArray containsObject:fileName])
    28                             {
    29                                 [fileNameArray addObject:fileName];
    30                                 [filePathArray addObject:str];
    31                             }
    32                         }
    33                         else
    34                         {
    35                             [fileNameArray addObject:fileName];
    36                             [filePathArray addObject:str];
    37                         }
    38                     }
    39                 }
    40             }
    41         }
    42     }
    43     //第一个数组保存的是图片名
    44     //第二个数组保存的是图片的完整路径
    45     [array addObject:fileNameArray];
    46     [array addObject:filePathArray];
    47     return array;
    48 }
    49 @end
     1 #import "LMFFindAllUsePicture.h"
     2 
     3 @implementation LMFFindAllUsePicture
     4 
     5 #pragma mark --找出所有的.m文件
     6 + (NSArray *)findAllFile:(NSArray *)fileNameList
     7 {
     8     NSMutableArray *array = [NSMutableArray array];
     9     for (NSString *str in fileNameList)
    10     {
    11         NSInteger length = str.length;
    12         if ([str characterAtIndex:length-1] == 'm' && [str characterAtIndex:length-2] == '.')
    13         {
    14             [array addObject:str];
    15         }
    16     }
    17     return array;
    18 }
    19 
    20 #pragma mark --遍历所有的.m文件找到所有使用的图片
    21 + (NSArray *)findAllPicture:(NSArray *)fileNameList WithDirectorPath:(NSString *)directorPath
    22 {
    23     NSFileManager *fileManager = [NSFileManager defaultManager];
    24     NSMutableArray *pictureArray = [NSMutableArray array];
    25     for (NSString *temp in fileNameList)
    26     {
    27         NSString *filePath = [directorPath stringByAppendingPathComponent:temp];
    28     
    29         if ([fileManager fileExistsAtPath:filePath])
    30         {
    31             NSData *data = [fileManager contentsAtPath:filePath];
    32             NSString *contentStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    33             //对字符串进行解析 image:@" "  imageNamed:@" "
    34             NSMutableString *contentMutableStr = [NSMutableString stringWithString:contentStr];
    35             NSArray *subString = @[@"image:@"", @"imageNamed:@""];
    36             for (NSString *sub in subString)
    37             {
    38                 for (NSString *pictureName in [self findPictureWithFileString:contentMutableStr andSubString:sub])
    39                 {
    40                     if (![pictureArray containsObject:pictureName])
    41                     {
    42                         [pictureArray addObject:pictureName];
    43                     }
    44                 }
    45             }
    46         }
    47         else
    48         {
    49             NSLog(@"文件不存在");
    50         }
    51     }
    52     return pictureArray;
    53 }
    54 
    55 + (NSArray *)findPictureWithFileString:(NSMutableString *)fileString andSubString:(NSString *)subString
    56 {
    57     NSMutableArray *array = [NSMutableArray array];
    58     BOOL flag = YES;
    59     while (flag)
    60     {
    61         NSString *pictureName;
    62         NSRange range = [fileString rangeOfString:subString];
    63         if (range.location != NSNotFound)
    64         {
    65             //将location之前的字符删除
    66             [fileString deleteCharactersInRange:NSMakeRange(0, range.location+subString.length)];
    67             NSRange range1 = [fileString rangeOfString:@"""];
    68             if (range1.location != NSNotFound)
    69             {
    70                 pictureName = [fileString substringToIndex:range1.location];
    71                 [fileString deleteCharactersInRange:NSMakeRange(0, range1.location)];
    72                 if (![array containsObject:pictureName])
    73                 {
    74                     [array addObject:pictureName];
    75                 }
    76             }
    77         }
    78         else
    79         {
    80             flag = NO;
    81         }
    82     }
    83     return array;
    84 }
    85 
    86 @end
     1 #import "LMFDeleteAllNoUsePicture.h"
     2 
     3 @implementation LMFDeleteAllNoUsePicture
     4 + (NSArray *)findPictureNotUseWithAllPicture:(NSArray *)allPictureArray andUsePicture:(NSArray *)usePicture
     5 {
     6     NSMutableArray *array = [NSMutableArray array];
     7     for (NSString *pictureName in allPictureArray)
     8     {
     9         if (![usePicture containsObject:pictureName])
    10         {
    11             if (![array containsObject:pictureName])
    12             {
    13                 [array addObject:pictureName];
    14             }
    15         }
    16     }
    17     return array;
    18 }
    19 @end
  • 相关阅读:
    asp iis5.1x 2147467259 (0x80004005)
    asp 编辑 文本框为何会自动多出个逗号?
    asp 调用Recordset对象操作数据库
    windows2003 iis中播放flv格式的视频设置
    金额拆分 "万千百"..
    类似银行交易记录
    太扯了asp
    asp中通过Connection链接数据库
    给被Access过大问题困扰的网站,提供几种解决方案
    六款WEB上传组件性能测试与比较
  • 原文地址:https://www.cnblogs.com/lmfboke/p/5580638.html
Copyright © 2020-2023  润新知