2011-10-26 176 views
10

我希望用戶選擇任何存在於她/他的iPhone中的文件,以便它用作電子郵件附件。爲此,我想顯示iPhone中存在的所有文件和文件夾的列表。但是,我將如何獲得這些文件的列表?有什麼方法可以獲得該列表嗎?如何列出iPhone SDK中的所有文件夾及其子目錄/文件?

+0

但是比如我有iPhone的硬盤.PDF本文件的地方,我想找到該文件或希望得到該文件比...的路徑? ? –

+0

您不能將所有文件存儲在應用程序沙箱中。您可以告訴系統您的應用支持PDF,並允許其他應用發送您的應用PDF。沒有其他辦法可以做到。 – rckoenes

回答

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); 
} 

斯威夫特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) 
} 
5

這裏是最慢的方法(?):

NSFileManager * fileManager = [NSFileManager new]; 
NSArray * subpaths = [fileManager subpathsAtPath:path]; 

但至少應該點你更專門的impl滿足您的需求。

允許您根據需要枚舉的略低級別抽象包括NSDirectoryEnumeratorCFURLEnumerator。根據目錄的深度,與-[NSFileManager subpathsAtPath:]相比,這些文件系統可以節省很多不必要的與文件系統的交互。

+0

你能否提一下第二行中變量「路徑」的值。 –

+0

@穆罕默德那麼,你不能訪問文件系統上任何地方的任何文件,因爲它是沙盒。您*可以*訪問您的應用程序的本地數據 - simpleBob的「documentsDirectory」演示瞭如何獲得該路徑。 – justin

+0

謝謝你的迴應,一個小小的混亂。如果我的文件存在於iPhone的照片文件夾中,該怎麼辦?我可以訪問它嗎?我的意思是說,我可以列出照片文件夾中存在的所有文件。 –

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]]; 
    } 
} 
1

FileExplorer控制這是iOS的文件瀏覽器,滿足您的大多數要求的作者。請注意,它允許您僅瀏覽放置在沙箱內的文件和目錄。

下面是我的一些控制功能:

  1. 可能性來選擇文件和/或目錄,如果有必要爲
  2. 方法可行刪除文件或/和目錄是否存在需要
  3. 內置搜索功能
  4. 查看音頻,視頻,圖像和PDF文件。
  5. 可以添加對任何文件類型的支持。

你可以找到我的控制here

2

SWIFT 3

let fileManager:FileManager = FileManager() 
    let files = fileManager.enumerator(atPath: NSHomeDirectory()) 
    while let file = files?.nextObject() { 
     print("Files::",file) 
    } 
相關問題