首页 文章

在iPhone SDK中使用通配符查找文件名

提问于
浏览
4

我正在尝试编写一个程序来创建动态命名的.csv文件,这些文件需要在以后的运行日期检索或删除 . 我想要做的是:

我想运行一个算法,找出是否存在这些类型的文件 . 例如,如果我动态地将文件命名为foobar ## . csv,其中##表示动态生成的数字并附加到文件名,我想查找是否存在任何foobar ## . csv文件,而不管使用的号码 . 通常我会使用这样的代码行:

NSString *dataFileName = [[self documentPath] stringByAppendingPathComponent:@"foobar01.csv"];

现在我只使用一个遍历每个值的循环并在找到bool时跳过bool,但我知道这不是最佳实践,因为它限制了用户可以使用的可能的文件名 . 任何洞察我如何在这样的搜索上使用某种通配符将不胜感激 .

另外,我想创建一个方法来删除程序找到的任何.csv文件,但我假设用于解决上述算法的方法也可以用于删除 .

3 回答

  • 0

    看看NSFileManagers contentsOfDirectoryAtPath:error: 方法 . 它将返回一个数组,其中包含相关目录的所有对象(文件和目录)的名称 .

    然后,您可以枚举该数组并检查这些字符串中是否存在“foobar” . 要么立即对您找到的文件执行某些操作,要么将“正”文件名存储在另一个数组中以供稍后处理 .

  • 6

    另一张海报或多或少说的样本代码 .

    +(NSMutableArray*) allocLocalFiles
    { 
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
    
        NSError * error = nil;
        NSArray *origContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory 
                                                                                    error:&error];
        NSMutableArray * files = [[NSMutableArray alloc]init];
    
        for (NSString* file in origContents) {
            NSString * ext = [file pathExtension];
            if ([ext compare:@"csv"]==0 && something_else)
            {
                [files addObject:
                 [NSString stringWithFormat:@"%@/%@",documentsDirectory,file]];
            }
        }
        return files;
    }
    
  • 2

    通配符匹配要使用通配符字符串匹配,查询可以使用like而不是比较运算符,并将“*”(匹配零个或多个字符)或“?”(恰好匹配1个字符)包含为通配符,如下所示:

    NSString *match = @"imagexyz*.png";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like %@", match];
    NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];
    

    http://useyourloaf.com/blog/2010/7/27/filtering-arrays-with-nspredicate.html

相关问题