stringWithContentsOfFile:encoding:error:错误260

时间:2011-06-03 15:06:47

标签: objective-c cocoa nsstring

我有一个小型实用程序应用程序,它解析csv文件并使用这些数据填充Core Data存储以供其他应用程序使用。我使用-initWithContentsOfFile:encoding:error:打开csv文件,该方法总是返回错误

的nil
Error Domain=NSCocoaErrorDomain Code=260 UserInfo=0x100106450 "The file “data.csv” couldn’t be 
opened because there is no such file." Underlying Error=(Error Domain=NSPOSIXErrorDomain Code=2 "The 
operation couldn’t be completed. No such file or directory"), {
NSFilePath = "/Users/****/Library/Developer/Xcode/DerivedData/CreateData-
bhkmspyczgcfcrgehcbaydwdbfoa/Build/Products/Debug/data.csv";
NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 \"The operation couldn\U2019t be 
completed. No such file or directory\"";
}

现在,我正在查看该确切目录中的确切文件。更令人困惑的是,我为另一个有效的应用程序提供了另一个基本相同的实用程序版本 - 唯一的区别是核心数据存储和实体的构成以及csv文件中的列数,所有这些都是加载csv文件后调用。或者没有加载,因为它......

int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSError *error = nil;
    NSString *csvFile = [[NSString alloc] initWithContentsOfFile:csvFilePath(QUESTIONS_INPUT_FILENAME) encoding:NSASCIIStringEncoding error:&error]; // This fails

    if (error != nil) {
        NSLog(@"Returned error:\n%@, %@", error, [error userInfo]); // Returns the above error message
        exit(1);
    }

// ...
}

NSString *csvFilePath(NSString *inputFileName) {
    NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
    return [resourcePath stringByAppendingPathComponent:inputFileName];
}

NSString *applicationDocumentsDirectory() {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

2 个答案:

答案 0 :(得分:8)

它失败了,因为你没有传入文件的实际位置,只是文件名,所以它试图在程序自己的文件夹中查找它 - 你正在使用包的路径。除非那是你的csv文件所在,否则它找不到它。

答案 1 :(得分:1)

简单地说,你传递的文件路径不正确,因此无法找到或不存在。