2010-01-31 48 views
6

Tôi đang cố trả lại danh sách các thư mục có trong thư mục Documents của ứng dụng. Tôi có thể nhận được một mảng chứa tất cả các tệp của một phần mở rộng đã cho (ví dụ: tệp .txt hoặc tệp .png) và có thể trả về tất cả các nội dung (kể cả các thư mục). Vấn đề phát sinh khi tôi chỉ muốn trả về các thư mục. Có cách đơn giản để làm điều này?Lấy mảng thư mục trong thư mục tài liệu

Đây là mã của tôi trả lại tất cả các file .txt:

- (ViewController *) init { 
    if (self = [super init]) self.title = @"Text Files"; 

    // get the list of .txt files 
    directoryList = [[[[NSFileManager defaultManager] directoryContentsAtPath:DOCUMENTS_FOLDER] 
         pathsMatchingExtensions:[NSArray arrayWithObjects:@".txt", nil]] retain]; 
    NSLog(@"%@", directoryList); 

    return self; 
} 

và cho tất cả các tập tin

- (ViewController *) init { 
    if (self = [super init]) self.title = @"Text Files"; 

    // get the list of all files and directories 
    directoryList = [[[NSFileManager defaultManager] directoryContentsAtPath:DOCUMENTS_FOLDER] retain]; 

    NSLog(@"%@", directoryList); 

    return self; 
} 

Trả lời

22

Hãy thử điều này:

- (ViewController *) init { 
    if (self = [super init]) self.title = @"Text Files"; 

    // get the list of all files and directories 
    NSFileManager *fM = [NSFileManager defaultManager]; 
    fileList = [[fM directoryContentsAtPath:DOCUMENTS_FOLDER] retain]; 
    NSMutableArray *directoryList = [[NSMutableArray alloc] init]; 
    for(NSString *file in fileList) { 
     NSString *path = [DOCUMENTS_FOLDER stringByAppendingPathComponent:file]; 
     BOOL isDir = NO; 
     [fM fileExistsAtPath:path isDirectory:(&isDir)]; 
     if(isDir) { 
      [directoryList addObject:file]; 
     } 
    } 

    NSLog(@"%@", directoryList); 

    return self; 
} 
+0

xuất sắc trả lời subw. Không biết về phương thức fileExistsAtPath: isDirectory: instance; Tôi sẽ đọc một tài liệu về NSFileManager. – Jack

+0

PS nó đã làm việc. – Jack

+2

directoryContentsOfPath: không được chấp nhận. Phải là subpathsOfDirectoryAtPath: thay vào đó là – DerWOK

2

Mrueg đã viết nó tất cả ngoại trừ một điều mà

fileList = [[fM directoryContentsAtPath:DOCUMENTS_FOLDER]; 

Thay thế bởi

fileList = [fileManager contentsOfDirectoryAtPath:filePath error:nil]; 
+0

Đúng. "directoryContentsAtPath" không còn được dùng nữa. –

Các vấn đề liên quan