iPhone: nsfilemanager fileexistatatath: isdirectory: لا يعمل بشكل صحيح؟

StackOverflow https://stackoverflow.com/questions/1196885

سؤال

أنا أعمل على تطبيق لجيلبروكدون 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: 23: 35.930 دروفر [573: 207] مسار جديد / خاص / var 2009-07-28 23: 23: 35.945 دروسر [573: 207] ContentOffolder: (سلاسل المفاتيح، "التفضيلات المدارة"، Mobiledevice، النسخ الاحتياطية، ذاكرة التخزين المؤقت، DB، EA، فارغة، مجلدات، LIB، المحلية، قفل، سجل، سجلات، المحمول، والأحرف، والأفضليات، الجذر، تشغيل، بكرة، مخبأ، TMP، VM)

ولكن بعد ذلك:

2009-07-28 23: 23: 23: 35.950 دروفر [573: 207] Apath: سلاسل المفاتيح 2009-07-28 23: 23: 35.954 دروسر [573: 207] apath: التفضيلات المدارة 2009-07-28 23: 23: 35.959 دروسر [573: 207] apath: mobiledevice 2009-07-28 23: 23: 35.984 دروفر [573: 207] Apath: النسخ الاحتياطي 2009-07-28 23: 23: 35.993 دروسر [573: 207] Apath: ذاكرة التخزين المؤقت 2009-07- 28 23: 23: 36.002 دروفر [573: 207] Apath: DB 2009-07-28 23: 23: 36.011 دروفر [573: 207] apath: EA 2009-07-28 23: 23: 36.019 دروسر [573: 207] Apath: فارغة 2009-07-28 23: 23: 36.028 دروسر [573: 207] apath: مجلدات 2009-07-28 23: 23: 36.037 دروسر [573: 207] apath: lib 2009-07-28 23:23: 36.046 دروسر [573: 207] الدقيق

فقط "ليب"! معترف به كمجلد. كيف يمكن أن يكون؟ الآخرين مجلدون أيضا. أكدت ذلك عبر SSH.

هل يوجد عندكم اي فكرة؟ أفعل شيئا خاطئا؟

هل كانت مفيدة؟

المحلول

هذا خطأ سهل حقا لجعل، ولكن من السهل أيضا إصلاحه. يعطيك تعداد محتويات الدليل فقط اسم العنصر، وليس المسار الكامل للعنصر. عليك أن تبني المسار الكامل بنفسك. إذن حيث لديك:

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];
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top