使用contentsAtPath读取的文件不起作用

时间:2014-03-30 16:30:23

标签: objective-c

以下是我的代码,我将newfile2放在与main.m所在目录相同的目录中(见图),但我收到File read failed错误。我哪里错了?

import

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

@autoreleasepool {

    NSFileManager *fm;
    NSData *fileData;

    fm = [NSFileManager defaultManager];

    //Read from the file nwefile2

    fileData = [fm contentsAtPath:@"newfile2"];

    if (fileData == nil) {
        NSLog(@"File read failed");
        return 1;
    }

    //Write the data to a file

    if ([fm createFileAtPath:@"newfile3" contents:fileData attributes:nil] == NO) {
        NSLog(@"File creation failed");
        return 2;
    }

    NSLog(@"File copy successful");
}
return 0;
}

image showing the file structure

2 个答案:

答案 0 :(得分:0)

问题是这一行没有说明在哪里找到文件:

fileData = [fm contentsAtPath:@"newfile2"];

假设部分路径将找到该文件(可能是因为您认为工作目录与您的程序是同一目录?),但这是一个错误的假设。没有人知道工作目录是什么!您必须具体说明文件的位置。

答案 1 :(得分:0)

在NSBundle类的api下面使用正确的方法来指定路径,尽管硬编码路径: -

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension

写如下: -

  fileData = [fm contentsAtPath:[[NSBundle mainBundle] 
                              pathForResource:@"newfile2" ofType:@"fileExt"]];

注意: - 在获取文件路径之前,您的文件应该出现在资源目录中。