لماذا NSFileManager العودة الحقيقية على fileExistsAtPath عندما لا يكون هناك مثل هذا الملف؟

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

سؤال

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

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top