NSFileManager fileExistsAtPath:isDirectory 问题
Posted
技术标签:
【中文标题】NSFileManager fileExistsAtPath:isDirectory 问题【英文标题】:NSFileManager fileExistsAtPath:isDirectory issue 【发布时间】:2012-02-28 20:24:21 【问题描述】:有人可以帮助我了解我在使用这种方法时做错了什么吗?
我正在尝试递归检测目录的内容并在每个目录中创建一个 xml 文件。非递归完美地工作并输出正确的 xml 文件。递归阻塞 dir 检测并在“directories”元素下添加所有文件 + dir。
_dirArray = [[NSMutableArray alloc] init];
_fileArray = [[NSMutableArray alloc] init];
NSError *error;
NSFileManager *filemgr = [NSFileManager defaultManager];
NSArray *filelist = [filemgr contentsOfDirectoryAtPath:dirPath error:&error];
for (int i = 0; i < filelist.count; i++)
BOOL isDir;
NSString *file = [NSString stringWithFormat:@"%@", [filelist objectAtIndex:i]];
[_pathToDirectoryTextField stringValue], [filelist objectAtIndex:i]];
if ([filemgr fileExistsAtPath:dirPath isDirectory:&isDir] && isDir) // I think this is what is crapping out.
[_dirArray addObject:file];
else
if ([file hasPrefix:@"."])
// Ignore file.
else
[_fileArray addObject:file];
感谢任何提示。
【问题讨论】:
【参考方案1】:我可以看到“if ([fileManager fileExistsAtPath:fontPath isDirectory:&isDir] && isDir)”来自 Apple 在文档中的示例,但是将其逐个复制并与 else 一起使用是一个非常糟糕的主意,除非您只想获得目录或删除的文件,因为它的意思是:
if (itexists and itsadirectory)
//its a existing directory
matches directories
else
//it is not a directory or it does not exist
matches files that were deleted since you got the listing
我会这样做:
NSString *dirPath = @"/Volumes/Storage/";
NSError *error;
NSFileManager *filemgr = [NSFileManager defaultManager];
NSArray *filelist = [filemgr contentsOfDirectoryAtPath:dirPath error:&error];
for (NSString *lastPathComponent in filelist)
if ([lastPathComponent hasPrefix:@"."]) continue; // Ignore file.
NSString *fullPath = [dirPath stringByAppendingPathComponent:lastPathComponent];
BOOL isDir;
BOOL exists = [filemgr fileExistsAtPath:fullPath isDirectory:&isDir];
if (exists)
if (isDir)
[_dirArray addObject:lastPathComponent];
else
[_fileArray addObject:lastPathComponent];
【讨论】:
其实我以前就是这样的,但它仍然不适合我。但是,如果您确信它应该......那么也许我的问题出在其他地方。嗯。 没有骰子。但无论哪种方式,这都是一个很好的选择。我会把它留在里面。 啊,它们需要在不同的范围内,例如 if (exists) if (isDir)以上是关于NSFileManager fileExistsAtPath:isDirectory 问题的主要内容,如果未能解决你的问题,请参考以下文章