我希望用户能够选择其iPhone中存在的任何文件,以便将其作为电子邮件附件使用。为此,我想展示iPhone中所有文件和文件夹的列表。但是如何获取这些文件的列表?是否有获取该列表的方法?
我希望用户能够选择其iPhone中存在的任何文件,以便将其作为电子邮件附件使用。为此,我想展示iPhone中所有文件和文件夹的列表。但是如何获取这些文件的列表?是否有获取该列表的方法?
请注意,您的应用程序运行在沙盒中,不能获取沙盒之外的任何文件夹/文件。
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
->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)
}
NSFileManager * fileManager = [NSFileManager new];
NSArray * subpaths = [fileManager subpathsAtPath:path];
但至少这应该能指向你需要的更专业的实现。
稍微低一级的抽象层,允许您按需枚举的包括NSDirectoryEnumerator
和CFURLEnumerator
。根据目录的深度,与-[NSFileManager subpathsAtPath:]
相比,它们有潜力节省大量不必要的文件系统交互。
documentsDirectory
演示了如何获取该路径。 - justinNSFileManager.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]];
}
}
swift 3
let fileManager:FileManager = FileManager()
let files = fileManager.enumerator(atPath: NSHomeDirectory())
while let file = files?.nextObject() {
print("Files::",file)
}