Ios 如何使用NSPredicate从部分字符串生成文件名,然后删除该文件?
我有以下文件: RN150622103444544_pr.pdfIos 如何使用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\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使用的内容。