我有一个小型实用程序应用程序,它解析csv文件并使用这些数据填充Core Data存储以供其他应用程序使用。我使用-initWithContentsOfFile:encoding:error:
打开csv文件,该方法总是返回错误
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];
}
答案 0 :(得分:8)
它失败了,因为你没有传入文件的实际位置,只是文件名,所以它试图在程序自己的文件夹中查找它 - 你正在使用包的路径。除非那是你的csv文件所在,否则它找不到它。
答案 1 :(得分:1)
简单地说,你传递的文件路径不正确,因此无法找到或不存在。