删除与iOS中的模式匹配的文件

时间:2011-05-30 18:37:33

标签: ios objective-c

有没有办法使用模式删除给定目录(非递归)中的所有文件?

作为一个例子,我有一些名为file1.jpgfile2.jpgfile3.jpg等的文件,我想知道是否有任何方法可以接受像这个UNIX命令那样的通配符:

rm file*.jpg

2 个答案:

答案 0 :(得分:16)

试试这个:

- (void)removeFiles:(NSRegularExpression*)regex inPath:(NSString*)path {
    NSDirectoryEnumerator *filesEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:path];

    NSString *file;
    NSError *error;
    while (file = [filesEnumerator nextObject]) {
        NSUInteger match = [regex numberOfMatchesInString:file
                                                  options:0
                                                    range:NSMakeRange(0, [file length])];

        if (match) {
            [[NSFileManager defaultManager] removeItemAtPath:[path stringByAppendingPathComponent:file] error:&error];
        }
    }
}

为你的例子

  

file1.jpg,file2.jpg,file3.jpg

您可以按如下方式使用:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^file.*\.jpg$"
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:nil];
[self removeFiles:regex inPath:NSHomeDirectory()];

答案 1 :(得分:0)

Swift版

func removeFiles(regEx:NSRegularExpression, path:String) {
    let filesEnumerator = NSFileManager.defaultManager().enumeratorAtPath(path)
    while var file:String = filesEnumerator?.nextObject() as? String {
        let match = regEx.numberOfMatchesInString(file, options: nil, range: NSMakeRange(0, file.length))
        if match > 0 {
            NSFileManager.defaultManager().removeItemAtPath(path.stringByAppendingPathComponent(file), error: nil)
        }
    }
}