zoukankan      html  css  js  c++  java
  • 用程序删除工程中多余的图片

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

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

      其次,通过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.net mvc和 jQuery UI 控件包
    ServiceStack.Redis 使用教程
    HTC T8878刷机手册
    Entity Framework CodeFirst 文章汇集
    2011年Mono发展历程
    日志管理实用程序LogExpert
    使用 NuGet 管理项目库
    WCF 4.0路由服务Routing Service
    精进不休 .NET 4.0 (1) asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进
    精进不休 .NET 4.0 (7) ADO.NET Entity Framework 4.0 新特性
  • 原文地址:https://www.cnblogs.com/lmfboke/p/5580638.html
Copyright © 2011-2022 走看看