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

                }

            }

            


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

原文地址:https://www.cnblogs.com/pruple/p/5277469.html