zoukankan      html  css  js  c++  java
  • 一道题看懂OC的文件管理:NSFileManager,计算文件包含内存大小

    • 计算文件夹下所有文件的大小

                 // 查看错误信息

                __autoreleasing NSError *error;

                // 文件管理对象

                NSFileManager *manager = [NSFileManager defaultManager];

                // 读取路径

                NSString *path = @"/Users/Mu/Desktop/copy/17-Copy基本使用(深浅拷贝).mp4";

                // 记录内存

                double size = 0;

                // 获取文件夹属性:内存大小不准确

                NSDictionary *dic1 = [manager attributesOfItemAtPath:path error:&error];

                // 查看是否出错

                // localizedFailureReason:失败原因

                // localizedDescription:本地描述信息

                

               // NSLog(@"%@", error.localizedDescription);

                // 关键字NSFileSize对应的是占用内存

               // NSLog(@"%@", dic1[@"NSFileSize"]);

                NSLog(@"----------");

                // isDirectory(计算机文件或程序的目录)

                BOOL dir = NO;

                // 判断文件是否存在,并且是否为文件夹

                if ([manager fileExistsAtPath:path isDirectory:&dir]&&dir==YES)

                {

                    // 获取文件夹所有的子文件:存入集合(包括子文件夹)

                    // - 方法返回值是一个NSArray:NSArray内存储的是NSString

                    NSArray *singe = [manager subpathsAtPath:path];

                    // 遍历集合即得到所有的文件名名:不是全部路径

                    for (NSString *str in singe)

                    {

                        // 因为是计算搜文件的大小,所以需要去掉子文件夹:通过判断文件格式即可 [str.pathExtension isEqualToString:@"png"]

                        // 或者判断其或者是否符合格式 [str hasSuffix:@".png"]

                        if ([str.pathExtension isEqualToString:@"png"])

                        {

                            // 因为得到的是去除掉总文件夹的文件名。因此需要加上文件的路径:占位符格式化

                            NSDictionary *dic = [manager attributesOfItemAtPath:[NSString stringWithFormat:@"%@/%@", path, str]error:&error];

                            // 叠加文件的大小

                            size += [dic[@"NSFileSize"] intValue];

                            // 打印每一个符合要求的路径

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

                        }

                      

                    }

                    // 打印文件的大小:文件的存储size是B,现在获取的是G

                      NSLog(@"%f", size/1000/1000/1000);

                    // 路径为文件

                }else

                {

                    // 文件不存在或者文件路径不是文件夹

                    NSLog(@"文件不存在||不是文件夹");

                   if(!dir)

                    {

                        // 路径是文件,其大小

                        NSLog(@"%f", [dic1[@"NSFileSize"] floatValue]/1000000000);

                    }

                }

                


    每句代码都有注释,多看看

  • 相关阅读:
    BZOJ5212 ZJOI2018历史(LCT)
    BZOJ5127 数据校验
    253. Meeting Rooms II
    311. Sparse Matrix Multiplication
    254. Factor Combinations
    250. Count Univalue Subtrees
    259. 3Sum Smaller
    156. Binary Tree Upside Down
    360. Sort Transformed Array
    348. Design Tic-Tac-Toe
  • 原文地址:https://www.cnblogs.com/pruple/p/5277469.html
Copyright © 2011-2022 走看看