我遇到了fileExistsAtPath:isDirectory的问题

时间:2011-09-14 14:35:35

标签: objective-c cocoa

在我的应用中,用户可以选择带有弹出对话框的图像。第一次这样做时,一切都按预期工作,并且在添加图像文件时,将调用isExistAtPath:isDirectory,并且dir返回NO。但是,当用户第二次选择图像时,fileExistsAtPath:isDirectory总是返回YES(即使它不是目录)。

-(void) addImagesWithPath:(NSURL *)fileURL recursive:(BOOL) recursive{
  int i, n;
  BOOL dir;
  NSError *error;
  NSURL *newURL;

  [[NSFileManager defaultManager] fileExistsAtPath:[fileURL absoluteString] isDirectory:&dir];

编辑:如果我在方法调用之前添加“dir = NO”它似乎工作,但感觉就像一个黑客。

1 个答案:

答案 0 :(得分:6)

在检查第二个(输出)参数的内容之前,您应该始终检查-[NSFileManager fileExistsAtPath:isDirectory:]的返回值。仅当方法返回YES时,输出参数才有意义。这在documentation

中有所描述
  

返回时,如果path是目录或者最终路径元素是指向目录的符号链接,则包含YES,否则包含NO如果路径不存在,则返回值未定义。如果您不需要此信息,请传递NULL

如果方法返回NO,则路径不存在或您的应用程序无法访问它。如果确实存在,请检查您的路径是否为完整路径(例如,它不应以~开头)。

此外,在将路径传递给-[NSURL path]时,您应该使用-[NSURL absoluteString]而不是NSFileManager