如何在 iPhone 上通过编程获取应用程序的存储大小

18
我想通过objective C获取iPhone上每个应用程序的存储大小。
有人可以帮忙获取像这样的信息...。 输入图像描述

1
你尝试过在捆绑包、库、文档和缓存目录中迭代浏览你的目录和文件吗? - basvk
是的,但我无法获取捆绑包中精确的目录和文件。你能帮忙找出来吗? - Suresh D
你的捆绑包中的文件/目录不会改变,因此您可以“只是”获取xcode项目的目录信息,并将该文件夹大小用作总空间的起点。然后再加上库、文档和缓存文件夹。也许有更好的方法,我没有经验。 - basvk
1
感谢 @basvk,让我试一试...! - Suresh D
1
请看这个链接 http://landonf.bikemonkey.org/code/iphone/Determining_Available_Memory.20081203.html,它可能会帮助你。 - Prabhjot Singh Gogana
3个回答

3
假设您正在为越狱设备开发(如果不是,则无法访问设备上的应用程序),SpringBoard 应该具有预定义的方法来访问所有安装的应用程序的元数据。如果查看 SBApplication.h 的标头,则可以找到获取元数据的方法。

2
    NSString *folderPath = "give application path here"

示例:NSString *folderPath =@"/private/var/mobile/Applications/2B63FD7F-2082-415D-A00C-F07C4BE281AA/Example.app";

以上是一个文件夹路径的示例,该路径位于iOS设备的私有目录中。在iOS开发中,很多时候需要访问这些私有目录,比如存储数据或者读取配置文件等等。因此,了解这些目录的路径非常重要。

    NSArray *filesArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:folderPath error:nil];

    NSEnumerator *filesEnumerator = [filesArray objectEnumerator];
    NSString *fileName;
    unsigned long long int fileSize = 0;

    while (fileName = [filesEnumerator nextObject])

    {
        NSDictionary *fileDictionary = [[NSFileManager defaultManager] fileAttributesAtPath:[folderPath stringByAppendingPathComponent:fileName] traverseLink:YES];

        NSLog(@" fileDictionary   %@",fileDictionary);

        fileSize += [fileDictionary fileSize];
    }

    NSLog(@" App Name and App size: %@ : %lld", folderPath,fileSize);

如果您想查找所有应用程序的大小,请将所有应用程序路径存入数组,并编写循环语句以遍历文件夹路径。

   NSArray *applicationsPath="Here array contain all applications path"
   for (int i=0; i<applicationPath.count; i++)
   {
    NSString *folderPath = [applicationPath objectAtIndex:i]

    NSArray *filesArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:folderPath error:nil];

    NSEnumerator *filesEnumerator = [filesArray objectEnumerator];
    NSString *fileName;
    unsigned long long int fileSize = 0;

    while (fileName = [filesEnumerator nextObject])

    {
        NSDictionary *fileDictionary = [[NSFileManager defaultManager] fileAttributesAtPath:[folderPath stringByAppendingPathComponent:fileName] traverseLink:YES];

        NSLog(@" fileDictionary   %@",fileDictionary);

        fileSize += [fileDictionary fileSize];
    }

    NSLog(@" App Name and App size: %@ : %lld", folderPath,fileSize);
   }

文件大小(fileSize)始终返回02016-07-18 19:53:07.040[1136:209376] 文件类型为NSFileTypeDirectory 2016-07-18 19:53:07.504[1136:209376] POSIX权限为493 2016-07-18 19:53:12.028[1136:209376] 应用名称和应用大小:/private/var/containers/Bundle/Application/80948321-EC7D-40A6-8C4B-9A1D82FD31E6/MS.app :0 - Stalin Pusparaj

0

除非设备越狱,否则您将无法以编程方式访问每个应用程序的文件夹。

这是因为每个iOS应用程序都在一个沙盒环境中运行,意味着您的应用程序只能访问此目录中的资源。如果设备已越狱,则可以删除此要求并授予您对设备磁盘的完全访问权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接