【问题标题】:Get array of directories in documents directory获取文档目录中的目录数组
【发布时间】:2011-01-11 10:47:37
【问题描述】:

我正在尝试返回应用程序的 Documents 目录中存在的目录列表。我能够得到一个包含给定扩展名的所有文件(例如 .txt 文件或 .png 文件)的数组,并且能够返回所有内容(包括目录)。当我只想返回目录时会出现问题。有没有一种简单的方法可以做到这一点?

这是我返回所有 .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;
}

对于所有文件

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

【问题讨论】:

    标签: iphone nsfilemanager


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 优秀答案子。不知道 fileExistsAtPath:isDirectory: 实例方法;我将阅读 NSFileManager 文档。
    • directoryContentsOfPath: 已弃用。必须是 subpathsOfDirectoryAtPath: 而不是
    • @DerWOK 这两种方法做的事情非常不同。 subpathsOfDirectoryAtPath:error:递归地列出子路径。 directoryContentsAtPath: 的正确替换是 contentsOfDirectoryAtPath:error:
    【解决方案2】:

    Mrueg 写了这一切,但只有一件事

    fileList = [[fM directoryContentsAtPath:DOCUMENTS_FOLDER];
    

    替换为

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

    【讨论】:

    • 正确。不推荐使用“directoryContentsAtPath”。
    猜你喜欢
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多