Mac OS:如何确定路径是文件还是目录

3

我有一个路径,想知道这是目录还是文件。这很简单,但我遇到了问题。这是我的路径:

NSString *file = @"file://localhost/Users/myUser/myFolder/TestFolder/";

或者

NSString *file = @"file://localhost/Users/myUser/myFolder/my_test_file.png";

这是我的代码:
BOOL isDir;


// the original code from apple documentation: 
// if ([fileManager fileExistsAtPath:file isDirectory:&isDir] && isDir)
// but even my if returns me "not ok" in log

if([[NSFileManager defaultManager] fileExistsAtPath:file isDirectory:&isDir])
{

     NSLog(@"directory");
}
else
{
     NSLog(@"not ok");
}

这些路径上的文件和目录存在,并且它们是正常的。但我认为问题可能出在它里面。但我不知道为什么。请帮助我解决这个问题。

顺便说一下,我从另一个方法获取了路径:

   NSArray *contentOfMyFolder = [[NSFileManager defaultManager]
                contentsOfDirectoryAtURL:urlFromBookmark
              includingPropertiesForKeys:@[NSURLContentModificationDateKey, NSURLLocalizedNameKey]
                                 options:NSDirectoryEnumerationSkipsHiddenFiles
                                   error:nil];

在这个for循环中,我获取了存储在数组contentOfMyFolder中的项目,并获取了以下路径:
 for (id item in contentOfMyFolder) {
     NSString *path = [item absoluteString]; 
 }

我认为这是方法fileExistsAtPath:(NSString *)path isDirectory:(BOOL)isDir的有效路径。
问题可能隐藏在哪里呢?
1个回答

6
问题出在这里:
NSString *path = [item absoluteString];

因为这会创建一个URL的字符串表示形式,例如
file://localhost/Users/myUser/myFolder/TestFolder/

而这不是 fileExistsAtPath: 方法所期望的。 你需要使用 path 方法将 URL 转换为路径:

for (NSURL *item in contentOfMyFolder) {
    NSString *path = [item path];
    BOOL isDir;
    if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]) {
        if (isDir) {
            NSLog(@"%@ is a directory", path);
        } else {
            NSLog(@"%@ is a file", path);
        }
    } else {
        NSLog(@"Oops, %@ does not exist?", path);
    }
}

另外一种方法是询问URL的“目录属性”:

for (NSURL *item in contentOfMyFolder) {
    NSNumber *isDir;
    NSError *error;
    if ([item getResourceValue:&isDir forKey:NSURLIsDirectoryKey error:&error]) {
        if ([isDir boolValue]) {
            NSLog(@"%@ is a directory", item);
        } else {
            NSLog(@"%@ is a file", item);
        }
    } else {
        NSLog(@"error: %@", error);
    }
}

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