【发布时间】:2011-10-29 08:13:04
【问题描述】:
在 Objective C 中,我如何获得 iPhone 上所有文件的列表?
这是否可能,或者我只能从某个目录或已知路径获取文件?
【问题讨论】:
-
您只能在沙箱中获取文件。
标签: iphone objective-c file detect nsfilemanager
在 Objective C 中,我如何获得 iPhone 上所有文件的列表?
这是否可能,或者我只能从某个目录或已知路径获取文件?
【问题讨论】:
标签: iphone objective-c file detect nsfilemanager
没有越狱你的手机。所有应用都位于沙盒中,并且只能查看某些文件。
【讨论】:
不,您只能在沙箱中获取文件。并使用以下代码显示您的当前目录:
- (NSString *) returnFilePath {
NSArray *pathArray =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [pathArray objectAtIndex:0];
}
【讨论】:
我不确定为什么人们会说您的应用只能查看沙箱内的某些文件。从 iOS 2.x 开始(我上次尝试过这样的操作),您可以使用 NSFileManager 列出几乎任何目录中的文件。这是获取特定目录中所有文件名称的all的小代码。
- (NSArray *)allFiles:(NSString *)aPath
NSMutableArray * listing = [NSMutableArray array];
NSArray * fileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:aPath error:nil];
if (!fileNames) return listing;
for (NSString * file in fileNames) {
NSString * absPath = [aPath stringByAppendingPathComponent:file];
BOOL isDir = NO;
if ([[NSFileManager defaultManager] fileExistsAtPath:absPath isDirectory:&isDir]) {
if (isDir) {
[listing addObject:absPath];
[listing addObjectsFromArray:[self allFiles:absPath]];
} else {
[listing addObject:absPath];
}
}
}
return listing;
}
这是一个非常简单的递归函数的例子。当然,它可以修改为更有效地使用块作为回调,甚至合并NSOperation。
【讨论】:
startPath(通过的参数)替换为aPath