NSDirectoryEnumerator 并枚举整个根卷
NSDirectoryEnumerator and enumerate entire root volume
我正在尝试使用 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];
}
}
我也遇到了类似的问题。这是使用 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"
}
}
}
我正在尝试使用 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];
}
}
我也遇到了类似的问题。这是使用 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"
}
}
}