Pregunta

Estoy trabajando en una aplicación para iPhones con jailbreak. Estoy tratando de obtener sólo los directorios de una carpeta. por lo que estoy haciendo esto:

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);

pero mira lo que me pasa. cuando llegue el contenido de la carpeta que todo se ve bien:

2009-07-28 23: 23: 35.930 Drowser [573: 207] nueva ruta / private / var 2009-07-28 23: 23: 35.945 Drowser [573: 207] contentOfFolder: (     llaveros,     "Preferencias administrado",     Dispositivo móvil,     copias de seguridad,     cache,     db,     ea,     vacío,     carpetas,     lib,     local,     bloquear,     Iniciar sesión,     troncos,     móvil,     Mensajes,     las preferencias,     raíz,     correr,     carrete,     reserva,     tmp,     vm )

pero entonces:

2009-07-28 23: 23: 35.950 Drowser [573: 207] Apath: Llaveros 2009-07-28 23: 23: 35.954 Drowser [573: 207] Apath: Gestionado Preferencias 2009-07-28 23: 23: 35.959 Drowser [573: 207] Apath: MobileDevice 2009-07-28 23: 23: 35.984 Drowser [573: 207] Apath: las copias de seguridad 2009-07-28 23: 23: 35.993 Drowser [573: 207] Apath: cache 2009-07-28 23: 23: 36.002 Drowser [573: 207] Apath: db 2009-07-28 23: 23: 36.011 Drowser [573: 207] Apath: ea 2009-07-28 23: 23: 36.019 Drowser [573: 207] Apath: vacía 2009-07-28 23: 23: 36.028 Drowser [573: 207]: Apath carpetas 2009-07-28 23: 23: 36.037 Drowser [573: 207] Apath: lib 2009-07-28 23: 23: 36.046 Drowser [573: 207] directoriesOfFolder (     lib )

única "lib"! se reconoce como carpeta. ¿como puede ser? los otros son carpetas también. Me confirmó que a través de SSH.

¿alguien tiene una idea? ¿Estoy haciendo algo mal?

¿Fue útil?

Solución

Esto es un error muy fácil de hacer, pero también es muy fácil de solucionar. Enumerar el contenido de un directorio sólo le da el nombre del elemento, no ruta completa del artículo. Usted tiene que construir la ruta completa a sí mismo. Entonces, ¿dónde tiene:

for (NSString *aPath in contentOfFolder) {
  NSLog(@"apath: %@", aPath);

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

En realidad debería tener este aspecto:

for (NSString *aPath in contentOfFolder) {
  NSString * fullPath = [path stringByAppendingPathComponent:aPath];

  BOOL isDir;
  if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] &&isDir) {
    [directoriesOfFolder addObject: fullPath];
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top