2011-03-02 31 views
4

我正在尝试编写一个程序,用于创建动态命名的.csv文件,这些文件需要在稍后的运行日期被检索或删除。我想要做的是这样的:在iPhone SDK中使用通配符查找文件名

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

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

现在我只是用一个循环,如果发现循环通过每个值和旅行一个布尔值,但我知道这是不是一个最佳实践它限制了用户可以使用的可能的文件名编号。任何洞察到我如何可以使用某种类型的通配符这样的搜索将不胜感激。

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

回答

2

看看NSFileManagerscontentsOfDirectoryAtPath:error:方法。它将返回一个数组,其中包含所涉及目录的所有对象(文件和目录)名称的字符串。

然后,您可以通过该数组枚举并检查这些字符串中是否出现“foobar”。请对您立即找到的文件做一些处理,或将“正面”文件名存储在另一个阵列中供以后处理。

+0

我稍后再看看这个今天。感谢您的时间。 – MarcZero

0

示例代码为什么另一个海报说或多或少。

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

谢谢你的例子。我今天晚些时候会看到这个。 – MarcZero

5

通配符匹配 要匹配使用通配符串的查询可以使用等代替比较运算符和包括有“*”(匹配零个或多个字符)或“?”(完全匹配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

相关问题