【问题标题】:iPhone: NSFilemanager fileExistsAtPath:isDirectory: not working properly?iPhone: NSFilemanager fileExistsAtPath:isDirectory: 不能正常工作?
【发布时间】:2010-11-14 21:02:01
【问题描述】:

我正在开发一款适用于越狱 iPhone 的应用。我试图只获取文件夹的目录。所以我这样做:

NSArray *contentOfFolder = [[NSFileManager defaultManager] directoryContentsAtPath:path];
NSLog(@"contentOfFolder: %@", contentOfFolder);
directoriesOfFolder = [[NSMutableArray alloc] initWithCapacity:100];
for (NSString *aPath in contentOfFolder) {
    NSLog(@"apath: %@", aPath);

    BOOL isDir;
if ([[NSFileManager defaultManager] fileExistsAtPath:aPath isDirectory:&isDir] &&isDir)
    {
        [directoriesOfFolder addObject:aPath];
        NSLog(@"directoriesOfFolder %@", directoriesOfFolder);
    }
}
NSLog(@"dirctories %@", directoriesOfFolder);

但是看看我得到了什么。当我得到文件夹的内容时,一切看起来都很好:

2009-07-28 23:23:35.930 Drowser[573:207] 新路径 /private/var 2009-07-28 23:23:35.945 Drowser[573:207] contentOfFolder:( 钥匙扣, “托管首选项”, 移动设备, 备份, 缓存, D b, 嗯, 空的, 文件夹, 库, 当地的, 锁, 日志, 日志, 移动的, 短信, 优先, 根, 跑步, 阀芯, 藏, 温度, 虚拟机 )

然后:

2009-07-28 23:23:35.950 Drowser[573:207] 路径:钥匙串 2009-07-28 23:23:35.954 Drowser[573:207] 路径:托管首选项 2009-07-28 23:23:35.959 Drowser[573:207] 路径:移动设备 2009-07-28 23:23:35.984 Drowser[573:207] 路径:备份 2009-07-28 23:23:35.993 Drowser[573:207] 路径:缓存 2009-07-28 23:23:36.002 Drowser[573:207] 路径:db 2009-07-28 23:23:36.011 Drowser[573:207] 路径:EA 2009-07-28 23:23:36.019 Drowser[573:207] 路径:空 2009-07-28 23:23:36.028 Drowser[573:207] 路径:文件夹 2009-07-28 23:23:36.037 Drowser[573:207] 路径:lib 2009-07-28 23:23:36.046 Drowser[573:207] 目录的文件夹( 库 )

只有“lib”!被识别为文件夹。这个怎么可能?其他的也是文件夹。我通过 SSH 确认了。

有人有想法吗?我做错了吗?

【问题讨论】:

    标签: iphone objective-c nsfilemanager


    【解决方案1】:

    这是一个非常容易犯的错误,但也很容易修复。枚举目录的内容只会给您项目的名称,而不是项目的完整路径。您必须自己构建完整路径。那么你在哪里:

    for (NSString *aPath in contentOfFolder) {
      NSLog(@"apath: %@", aPath);
    
      BOOL isDir;
      if ([[NSFileManager defaultManager] fileExistsAtPath:aPath isDirectory:&isDir] &&isDir) {
        [directoriesOfFolder addObject:aPath];
        NSLog(@"directoriesOfFolder %@", directoriesOfFolder);
      }
    }
    

    你实际上应该有这个:

    for (NSString *aPath in contentOfFolder) {
      NSString * fullPath = [path stringByAppendingPathComponent:aPath];
    
      BOOL isDir;
      if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] &&isDir) {
        [directoriesOfFolder addObject: fullPath];
      }
    }
    

    【讨论】:

    • 我确定我只是在这里暴露了我对指针语法的无知,但你不想在&&isDir 之间留一个空格吗?
    • @Yar:我通常会放一个,但我用手指粗了这个,然后把它放了出来。但是,我不认为它在语法上是必需的。
    • 明白,只是检查一下我没有遗漏什么。谢谢。
    猜你喜欢
    • 2016-10-10
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2010-11-30
    相关资源
    最近更新 更多