7

我正在为越狱的 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:(钥匙串,“托管首选项”,MobileDevice,备份、缓存、db、ea、空、文件夹、lib、本地、锁、日志、日志、移动设备、msgs、首选项、root、运行、假脱机、存储、tmp、vm)

但是之后:

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

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

有人有想法吗?难道我做错了什么?

4

1 回答 1

23

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

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];
  }
}
于 2009-07-28T22:22:13.713 回答