• 一道题看懂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);

                    }

                }

                


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

  • 相关阅读:
    排查和解决线上SQL和连接和hung住等问题
    动态模型中嵌入静态模型实践
    敏捷 ? DevOps ?
    Redis stream性能测试实践【Java版】
    性能测试中的随机数性能问题探索
    jdbc自带MySQL连接池实践
    延迟队列DelayQueue性能测试
    Java的标识符(命名规范)
    C# 数据类型与类型转换
    C#初识
  • 原文地址:https://www.cnblogs.com/pruple/p/5277469.html
Copyright © 2020-2023  润新知