在应用启动时获取捆绑文件引用/路径

时间:2012-08-30 21:27:35

标签: ios ios5 nsfilemanager nsbundle

假设主应用程序包中包含任意一组文件。我想获取启动时的文件URL并将它们存储在某个地方。这可以使用NSFileManager吗?在这方面,文件不清楚。

注意:我只需要文件URL,我不需要访问实际文件。

4 个答案:

答案 0 :(得分:65)

您可以使用

获取主包中文件的URL
NSString *path = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"jpeg"];
NSURL *url = [NSURL fileURLWithPath:path];

您可以将此URL写入例如Documents目录中的属性列表文件:

NSString *docsDir = [NSSearchForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [docsDir stringByAppendingPathComponent:@"Files.plist"];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[url absoluteString] forKey:@"SomeFile.jpeg"];
[dict writeToFile:plistPath atomically:YES];

如果您不知道文件的名称,并且只想列出软件包中的所有文件,请使用

NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] bundlePath] error:NULL];
for (NSString *fileName in files) {
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:path];
    // do something with `url`
}

答案 1 :(得分:6)

或者在Swift 4中:

        let url = Bundle.main.url(forResource: "FileName", withExtension: ".xyz")

答案 2 :(得分:2)

是的,你会得到他们的路径:

NSString *path = [NSBundle mainBundle] pathForResource:@"file1" ofType:@"png"];
NSURL *fileURL = [NSURL fileURLWithPath:path]

// save it as any other object or in a dictionary:

[myMutableDictionary setObject:fileURL forKey:@"file1.png"];

编辑:要获取完整的文件列表,请使用NSFileManager,获取包本身的路径,然后遍历每个目录获取文件,制作URL并将其保存在某处。 SO上有很多代码如何遍历目录来执行此操作。 [你应该更新你的问题以更具体地说明你想要的东西,这最初根本没有说明]

答案 3 :(得分:1)

可以在10.6或iOS 4上使用NSBundledocumentation)上的API来直接获得NSURL,而不是将路径传递给NSURL构造函数:

- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext;

它还包含subdirectorylocalizationName的变体,与其-pathForResource:等价物相同。