iPhone: nsfilemanager fileexistatatath: isdirectory: لا يعمل بشكل صحيح؟
-
20-09-2019 - |
سؤال
أنا أعمل على تطبيق لجيلبروكدون 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];
}
}