我注意到'bog标准'Objective-C文件夹检测代码出错。我正在扫描具有给定路径的文件和文件夹,并记录存在多少文件以及存在多少个文件夹。
奇怪的是,我正在返回一个比实际存在多一个文件夹的数量!
逐步调试例程并观察每个文件/文件夹名称,因为例程确定对象是文件还是文件夹,正在向我显示其中一个文件正在通过测试成为文件夹!?!?! ?
错误检测到的文件是“带附件的RTF(RTFD)”文件类型。我还没有检查其他文件夹,看看是否有更多的文件类型可能会错误报告。
除了这个文件外,我程序中的其他所有内容都正常工作。
有没有人有任何想法我可能做错了什么?或者它是Objective-C中的已知错误?
以下是我正在使用的代码的一部分:
BOOL isDir;
NSString *file;
NSString *docsDir = [self path];
NSFileManager *manager = [NSFileManager defaultManager];
NSDirectoryEnumerator *dirEnum = [manager enumeratorAtPath: docsDir];
NSDictionary *fattrs;
//(only showing important declarations above)
while (file = [dirEnum nextObject]) {
//If user clicked the Abort Button, get out of the loop
if (abortFlag)
break;
if ([excludeSubdirectories state] == NSOnState) {
[dirEnum skipDescendents];
}
if ([manager fileExistsAtPath:[docsDir stringByAppendingPathComponent:file]
isDirectory:&isDir] && isDir) {
++dirCount;
if ([excludeSubdirectories state] == NSOnState) {
continue;
}
}
}
//... Do a bunch of other stuff, etc., etc. ...
答案 0 :(得分:3)
RTFD文件实际上是捆绑包,它们只是花哨的目录。您可以通过右键单击rtfd文件并选择“显示包内容”选项来验证这一点。
如果您在Mac OS X上编写此内容,则可以使用-[NSWorkspace isFilePackageAtPath:]来识别这些捆绑包。