2011-10-26 42 views
10

Tôi muốn người dùng chọn bất kỳ tệp nào có trong iPhone/iPhone của mình để nó được sử dụng làm tệp đính kèm e-mail. Với mục đích này, tôi muốn hiển thị danh sách tất cả các tệp và thư mục có trong iPhone. Nhưng làm thế nào tôi sẽ nhận được danh sách các tập tin đó? Có cách nào để lấy danh sách đó không?Làm thế nào để liệt kê tất cả các thư mục và thư mục con/tệp trong iPhone SDK?

+0

Nhưng ví dụ tôi có tập tin .pdf hiện đâu đó trong ổ cứng của iPhone và tôi muốn xác định vị trí tập tin đó hoặc muốn lấy đường dẫn của file đó hơn ... ?? ? –

+0

Bạn không thể lưu trữ tất cả các tệp trong hộp cát ứng dụng. Bạn có thể nói với hệ thống rằng ứng dụng của bạn hỗ trợ PDF và cho phép các ứng dụng khác gửi tệp PDF ứng dụng của bạn. Không có cách nào khác để làm điều đó. – rckoenes

Trả lời

18

Hãy xem xét rằng ứng dụng của bạn chạy trong hộp cát và sẽ không thể lấy bất kỳ thư mục/tệp nào bên ngoài hộp cát đó.

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

Đây là chậm nhất cách tiếp cận (?):

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

nhưng điều đó nên ít nhất điểm bạn đến một nhiều chuyên impl ementation cho nhu cầu của bạn.

Tóm tắt mức độ thấp hơn một chút cho phép bạn liệt kê theo yêu cầu bao gồm NSDirectoryEnumeratorCFURLEnumerator. Tùy thuộc vào độ sâu của thư mục, chúng có khả năng tiết kiệm nhiều tương tác không cần thiết với hệ thống tệp, so với -[NSFileManager subpathsAtPath:].

+0

Bạn có thể đề cập đến giá trị của biến "đường dẫn" trong dòng thứ hai không. –

+0

@Muhammed Vâng, bạn không có quyền truy cập vào bất kỳ tệp nào ở bất kỳ đâu trên hệ thống tệp vì nó là hộp cát.Bạn * làm * có quyền truy cập vào dữ liệu cục bộ của ứng dụng của bạn - các tài liệu 'simpleDob 'của simpleBob thể hiện cách bạn sẽ nhận được đường dẫn đó. – justin

+0

Cảm ơn bạn đã trả lời một sự nhầm lẫn nhỏ. nếu các tập tin của tôi có trong thư mục ảnh của iPhone. Tôi có truy cập được không? tôi có nghĩa là để nói rằng tôi có thể liệt kê tất cả các tập tin có trong thư mục ảnh. –

3

Bạn có thể sử dụng NSDirectoryEnumerator qua NSFileManager.enumeratorAtPath

Từ các tài liệu:

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

Tôi là một tác giả của FileExplorer kiểm soát mà là một trình duyệt tập tin cho iOS và đáp ứng hầu hết các yêu cầu của bạn. Lưu ý rằng nó cho phép bạn duyệt các tập tin và thư mục được đặt bên trong sandbox của bạn.

Dưới đây là một số tính năng kiểm soát của tôi:

  1. Khả năng để lựa chọn các tập tin hoặc/và thư mục nếu có một nhu cầu cho điều đó
  2. possiblity để loại bỏ các tập tin hoặc/và thư mục nếu có một cần cho rằng
  3. Chức năng tìm kiếm được tích hợp
  4. Xem các tệp Âm thanh, Video, Hình ảnh và PDF.
  5. Khả năng thêm hỗ trợ cho bất kỳ loại tệp nào.

Bạn có thể tìm thấy điều khiển của mình here.

2

nhanh chóng 3

let fileManager:FileManager = FileManager() 
    let files = fileManager.enumerator(atPath: NSHomeDirectory()) 
    while let file = files?.nextObject() { 
     print("Files::",file) 
    } 
Các vấn đề liên quan