2009-07-28 16 views
7

Jailbroken iPhone'lar için bir uygulama üzerinde çalışıyorum. Sadece bir klasörün dizinlerini almaya çalışıyorum. Bu yüzden şunu yapıyorum:iPhone: NSFilemanager dosyasıExistsAtPath: isDirectory: düzgün çalışmıyor mu?

Ama ne elde ettiğime bakın. Klasörün içeriğini aldığımda her şey iyi görünüyor:

2009-07-28 23: 23: 35.930 Drowser [573: 207] yeni yol/özel/var 2009-07-28 23: 23: 35.945 Drowser [573: 207] contentOfFolder: ( Anahtarlık, "Yönetilen Tercihler", MobileDevice, yedeklemeler, önbellek, db, ea, boş, klasörler, lib, yerel , kilidi, günlüğü, günlükleri, cep, msj, tercihleri, ardından kökü, işletilen makara, zulası, tmp, vm )

ama:

2009-07-28 23: 23: 35,950 Drowser [573: 207] apath : Anahtarlıklar 2009-07-28 23: 23: 35.954 Drowser [573: 207] apath: Yönetilen Tercihler 2009-07-28 23: 23: 35.959 Drowser [573: 207] apath: MobileDevice 2009-07-28 23 : 23: 35.984 Drowser [573: 207] apath: yedekler 2009-07-28 23: 23: 35.993 Drowser [573: 207] apath: önbellek 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: boş 2009-07-28 23: 23: 36.028 Drowser [573: 207] apath: klasörler 2009-07-28 23: 23: 36.037 Drowser [573: 207] apath: lib 2009-07-28 23: 23: 36,046 Drowser [573: 207] directoriesOfFolder ( lib )

sadece "lib"! klasör olarak tanınır. nasıl olabilir? diğerleri de klasörleri. SSH ile doğruladım.

Kimsenin bir fikri yok mu? Yanlış bir şey mi yapıyorum?

cevap

23

Bunu yapmak çok kolay bir hatadır, ancak düzeltmesi de kolaydır. Bir dizinin içeriğini numaralandırmak, yalnızca öğenin tam yolunu değil, öğenin adını verir. Tam yolu kendin inşa etmelisin. Yani var burada:

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

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

Aslında bu olmalıdır:

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

    BOOL isDir; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] &&isDir) { 
    [directoriesOfFolder addObject: fullPath]; 
    } 
} 
+2

Ben sadece burada işaretçi sözdizimi benim cehalet açığa eminim ama 'arasına boşluk istemiyoruz && 've' isDir'? –

+0

@Yar: Genellikle bir tanesini koyarım ama şişmanladım ve bıraktım. Ancak, sözdizimsel olarak gerekli olduğuna inanmıyorum. –

+0

Anladım, sadece bir şeyi kaçırmadığımı kontrol ediyorum. Teşekkür ederim. –

İlgili konular