确定 NSString 中的路径是指向目录还是文件?

27

我有一个包含路径的NSString变量,但它可能是文件或目录。

在Cocoa中,是否有类似于Python os.path.isdir()os.path.isfile()方法的等效方法?

2个回答

48

请查看NSFileManager类的参考文档

[[NSFileManager defaultManager] fileExistsAtPath:pathname 
                                isDirectory:&directoryFlag];
例如:
NSString *file = @"/tmp/";
BOOL isDir = NO;
if([[NSFileManager defaultManager]
     fileExistsAtPath:file isDirectory:&isDir] && isDir){
    NSLog(@"Is directory");
}

1
重要的是,在方法的isDirectory:部分传递的BOOL是真正用来查看文件是否为文件夹的!从fileExistsAtPath:isDirectory:返回的BOOL只是确认文件是否存在于该路径。 - Will

2

如果htw提供的解决方案无效,请尝试以下方法:

NSString *file = @"/tmp/";
BOOL isDir
NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:file];
while ((file = [dirEnum nextObject])) {
   [[NSFileManager defaultManager] fileExistsAtPath:file isDirectory:&isDir];
   if(isDir){
      NSLog(@"%@ is a directory", file);
   }
}

你的解决方案与 how 的实际上是一样的,但我担心它包含一个错误 - 你得到的 'file' 是一个相对路径(相对于 "/tmp"),而不是绝对路径,因此在它上面使用 'fileExistsAtPath:isDirectory' 可能会失败。这个方法只适用于绝对路径。 - Motti Shneor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接