Ios 如何使用NSPredicate从部分字符串生成文件名,然后删除该文件?

Ios 如何使用NSPredicate从部分字符串生成文件名,然后删除该文件?,ios,objective-c,nspredicate,Ios,Objective C,Nspredicate,我有以下文件: RN150622103444544_pr.pdf RN150622103444544\u ID\u GD.pdf RN150622103444544_CA.xml 我的问题是如何仅通过使用NSPredicate引用文件名的RN150622103444544部分来删除所有文件 当前我的代码正在逐个删除: -(void)deleteOldPdfs:(NSString *)proposal { NSError *error = nil; NSArray *paths

我有以下文件:

RN150622103444544_pr.pdf
RN150622103444544\u ID\u GD.pdf
RN150622103444544_CA.xml

我的问题是如何仅通过使用NSPredicate引用文件名的RN150622103444544部分来删除所有文件

当前我的代码正在逐个删除:

-(void)deleteOldPdfs:(NSString *)proposal
{

    NSError *error = nil;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    if([fm fileExistsAtPath:[FormsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_pr_1.pdf",proposal]]])
       [fm removeItemAtPath:[FormsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_pr_1.pdf",proposal]] error:&error];

    if([fm fileExistsAtPath:[FormsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_id_GD.pdf", proposal]]])
       [fm removeItemAtPath:[FormsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_id_GD.pdf", proposal]] error:&error];

    if([fm fileExistsAtPath:[FormsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_CA.xml", proposal]]])
       [fm removeItemAtPath:[FormsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_CA.xml",proposal]] error:&error];

}

您可以使用以下类似的方法列出目录的内容,然后使用NSPredicate将这些内容过滤为仅包含标签的路径

- (void) deleteFilesContainingLabel:(NSString *)label{        
    NSFileManager *fm = [NSFileManager defaultManager];

    // Get the root directory path
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    // Create a predicate to filter out file paths containing the required
    // label.
    NSPredicate *filter = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"self CONTAINS '%@'",label]];

    // List the directory
    NSArray *dirContents = [fm contentsOfDirectoryAtPath:documentsDirectory error:nil];

    // Filter the list using our predicate
    NSArray *filteredFiles = [dirContents filteredArrayUsingPredicate:filter];

    // Delete the files which pass the predicate filter.
    NSError *error;
    for (NSString *path in filteredFiles){
      [fm removeItemAtPath:path error:&error];
    }
}

苹果公司建议在文件处理中使用NSURLs not path。@Avt您可以使用NSString或NSURL,但在手册中NSURL被引用为“一般首选”。在这种情况下,我怀疑会有很多收获。改为使用NSURL非常简单,但我只是尽可能接近OP使用的内容。