我正在尝试使用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];
}
}
答案 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"
}
}
}