لماذا NSFileManager العودة الحقيقية على fileExistsAtPath عندما لا يكون هناك مثل هذا الملف؟
-
20-09-2019 - |
سؤال
وNSFilemanager يعود ينطبق على ما يلي، عندما لا ينبغي أن يكون هناك أي ملف من هذا القبيل هناك حتى الان. ما الذي يحدث؟
if([myManager fileExistsAtPath:[[self documentsDirectory] stringByAppendingPathComponent:@"Music/songlist.txt"]]){
NSLog(@"file is there");
}
المحلول
وثائق <وأ href = "http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/doc/uid / 20000305-CHDDDDJG "يختلط =" noreferrer "> NSFileManager
يبدو أن يوصي <م> لا م> فحص لمعرفة ما إذا كان وجود ملفات، وبدلا من مجرد محاولة لقراءة الملف ومعالجة أية أخطاء برشاقة (على سبيل المثال < م> ملف لم يتم العثور م> خطأ). ما كنت تصف لا يبدو وكأنه شرط السباق الذي ما توصية الوثائق وتحاول التحايل ولكن ماذا يحدث إذا كنت مجرد محاولة لتحميل الملف بدلا من التحقق لمعرفة ما إذا كان موجودا؟ هل يمكن، على سبيل المثال، جرب ما يلي:
NSError *error;
NSStringEncoding encoding;
NSString *fileContents = [NSString stringWithContentsOfFile:fileName
usedEncoding:&encoding
error:&error];
if (fileContents == nil)
{
NSLog (@"%@", error);
}
else
{
NSLog (@"%@", fileContents);
}
إذا تحصل على سلسلة مع كل من محتويات الملف، ثم الملف هو واضح هناك. إذا كنت تحصل على خطأ ثم هناك شيئا مع myManager
.
نصائح أخرى
وطباعة هذا الخروج ومعرفة ما اذا كان هو ما كنت تتوقع.
NSLog(@"Directory: %@", [[self documentsDirectory] stringByAppendingPathComponent:@"Music/songlist.txt"]];
وأيضا، الاختيار التي تقوم بتعريف myManager بشكل صحيح.
وهذا يعمل كما هو متوقع بالنسبة لي.
NSFileManager *myManager = [NSFileManager defaultManager];
NSString *documentsDirectory = NSHomeDirectory();
if([myManager fileExistsAtPath:[documentsDirectory stringByAppendingPathComponent:@"Music/songlist.txt"]]){
NSLog(@"file is there");
}