【问题标题】:Finding a filename with a wildcard in iPhone SDK在 iPhone SDK 中查找带有通配符的文件名
【发布时间】:2011-03-02 14:53:17
【问题描述】:

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

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

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

现在我只使用一个循环遍历每个值并在找到一个布尔值时触发一个布尔值,但我知道这不是最佳实践,因为它限制了用户可以使用的可能文件名编号。任何有关我如何在这样的搜索中使用某种通配符的见解将不胜感激。

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

【问题讨论】:

    标签: iphone search sdk document wildcard


    【解决方案1】:

    通配符匹配 要使用通配符字符串进行匹配,查询可以使用 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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 今天晚些时候我会看看这个。感谢您的宝贵时间。
      【解决方案3】:

      其他发帖人或多或少所说的示例代码。

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

      【讨论】:

      • 谢谢你的例子。今天晚些时候我会看看这个。
      猜你喜欢
      • 2018-09-19
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2018-07-03
      • 2011-07-12
      相关资源
      最近更新 更多