我希望用户选择她/他的iPhone中存在的任何文件,以便将其用作电子邮件附件。为此,我想显示iPhone中存在的所有文件和文件夹的列表。但是我如何获得这些文件的列表?有没有办法获得该名单?
答案 0 :(得分:18)
考虑到您的应用在沙盒中运行,并且无法获取该沙箱之外的任何文件夹/文件。
<强>的ObjectiveC 强>
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *manager = [NSFileManager defaultManager];
NSArray *fileList = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];
for (NSString *s in fileList){
NSLog(@"%@", s);
}
Swift 4
guard let documentsDirectory = try? FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) else { return }
guard let fileEnumerator = FileManager.default.enumerator(at: documentsDirectory, includingPropertiesForKeys: nil, options: FileManager.DirectoryEnumerationOptions()) else { return }
while let file = fileEnumerator.nextObject() {
print(file)
}
答案 1 :(得分:5)
这是最慢的(?)方法:
NSFileManager * fileManager = [NSFileManager new];
NSArray * subpaths = [fileManager subpathsAtPath:path];
但这至少应该指向一个更专业的实现来满足您的需求。
允许您按需枚举的略低级别抽象包括NSDirectoryEnumerator
和CFURLEnumerator
。与-[NSFileManager subpathsAtPath:]
相比,这些文件系统有可能与文件系统保存很多不必要的交互,具体取决于目录的深度。
答案 2 :(得分:3)
您可以通过NSFileManager.enumeratorAtPath
NSDirectoryEnumerator
来自文档:
NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"];
NSFileManager *localFileManager=[[NSFileManager alloc] init];
NSDirectoryEnumerator *dirEnum =
[localFileManager enumeratorAtPath:docsDir];
NSString *file;
while ((file = [dirEnum nextObject])) {
if ([[file pathExtension] isEqualToString: @"doc"]) {
// process the document
[self scanDocument: [docsDir stringByAppendingPathComponent:file]];
}
}
答案 3 :(得分:2)
swift 3
let fileManager:FileManager = FileManager()
let files = fileManager.enumerator(atPath: NSHomeDirectory())
while let file = files?.nextObject() {
print("Files::",file)
}
答案 4 :(得分:1)
我是FileExplorer控件的作者,它是iOS的文件浏览器,可满足您的大部分要求。请注意,它允许您仅浏览放置在沙箱中的那些文件和目录。
以下是我控制的一些功能:
您可以找到我的控件here。