NSDirectoryEnumerator并枚举整个根卷

时间:2015-03-18 16:11:04

标签: objective-c cocoa nsarray

我正在尝试使用NSDirectoryEnumerator枚举我的整个根卷,以获取所有文件的数组。虽然这可以做到但它很慢并且使用大量内存。

有更好的方法吗?如果是这样,那么我希望内存使用量少于性能。

谢谢!

这就是我正在使用的:

    NSFileManager *fm = [NSFileManager defaultManager];
    NSMutableArray *files = [[NSMutableArray alloc] init];
    NSString *dp = @"/";
    NSDirectoryEnumerator *dirEnum = [fm enumeratorAtPath:dp];
    NSString *filePath;
    NSString *fullFilePath;

    BOOL isDir;
    filePath = [dirEnum nextObject];
    while (filePath) {
        @autoreleasepool
        {
            fullFilePath = [dp stringByAppendingPathComponent:filePath];
            [fm fileExistsAtPath:fullFilePath isDirectory:&isDir];
            if (isDir==false) {
                [files addObject:fullFilePath];
            }
            filePath = [dirEnum nextObject];
        }
    }

1 个答案:

答案 0 :(得分:0)

我也有类似的问题。这是使用Swift,这是我开始工作的两个。较长的一个使用较少的内存。

let fileManager:NSFileManager = NSFileManager()
let files = fileManager.enumeratorAtPath("/")
while let file: AnyObject = files?.nextObject() {
if file.hasSuffix("pst") {
self.OutPutText.stringValue += "\(file) \n"
}

第二个例子:

func searchPst(path: String) {
    let files = NSFileManager.defaultManager();
    let dir = files.contentsOfDirectoryAtPath(path, error: nil);
    if dir == nil{
        return
    }
    var isDir : ObjCBool = false
    for file in dir! {
        var file2 = path + (file as! String)
        if path != "/"{
            file2 = path + "/" + (file as! String)
        }
        if files.fileExistsAtPath(file2, isDirectory:&isDir)
        {
            if isDir{
                if path == "/" {
                    searchPst(file2)
                }
                else{
                    if path == "/Volumes"
                    {

                    }
                    else
                    {
                        let file3 = path + "/" + (file as! String)
                        searchPst(file3)
                    }
                }
            }
        }
        if file.hasSuffix("pst") {
            if path == "/"{
                OutPutText.stringValue += path + (file as! String) + "\n"
            }
            else{
                OutPutText.stringValue += path + "/" + (file as! String) + "\n"
            }
        }
    }