在iphone应用程序中读取文件的问题!

时间:2010-08-24 08:59:31

标签: iphone objective-c cocoa cocoa-touch

我正在iphone应用程序中读取文件。它的工作很好。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSLog(@"%@",documentsDirectory);
    NSString *fileName = [NSString stringWithFormat:@"%@/test.txt",documentsDirectory];
    NSLog(@"%@",fileName);
    NSString *content = [[NSString alloc] initWithContentsOfFile:fileName
                                                    usedEncoding:nil
                                                           error:nil];
    NSLog (@"%@",content);
}
当我使用文件名test.txt

时,

效果很好

但是当我在资源中添加另一个文件时,假设test1.txt,则NSLog(@"%@",documentsDirectory)NSLog(@"%@",fileName)会显示正确的结果。但是

NSLog (@"%@",content);null中打印log。那是什么原因?

我正在打印详细信息错误并打印

NSFilePath = "/Users/sam-xxx/Library/Application Support/iPhone Simulator/3.2/Applications/51197946-6042-4A90-AA39-F07F8A649308/Documents/test1.txt";
    NSUnderlyingError = Error Domain=NSPOSIXErrorDomain Code=2 "Operation could not be completed. No such file or directory";

3 个答案:

答案 0 :(得分:4)

最好检查是否返回错误:

NSError *error;
NSString *content = [[NSString alloc] initWithContentsOfFile:fileName
                                                usedEncoding:nil
                                                       error: &error];
if (error) NSLog(@"Error !: %@", [error localizedDescription]);

那将(希望)给你一个关于最新情况的线索。

(编辑为示例包资源使用情况,因为文件位于包中而不是Documents目录中。)

NSBundle的文档在这里:NSBundle Documentation

你有2个选择,你建议的那个:

NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];

将返回Bundle资源目录,并在该路径后附加文件名。

我个人更喜欢pathForResource:ofType:method:

NSString *filename = [[NSBundle mainBundle] pathForResource: @"test1" ofType: @"txt"];

因为这不仅会告诉您文件是否存在(如果不存在则返回nil),但如果您有文件,也会搜索本地化目录。

答案 1 :(得分:0)

您是否检查错误消息中的文件是否存在?在模拟器中运行时,只需打开Finder,按cmd + shift + g并将目录粘贴到文件中。

也许你没有把它添加到目标?打开资源中文件的信息窗口,检查选中的目标。

答案 2 :(得分:0)

在Simulator中运行应用程序时,可以使用Finder将正确的文件复制并粘贴到应用程序的Documents目录中,但是在iPhone或iTouch上,如何将文件粘贴到Documents目录中。

当应用程序在iPhone或iTouch上运行时,我们只有2种方法可以将内容放入Documents目录。

  1. 创建一个。
  2. 从捆绑中复制一份。
  3. 在您的代码中,您读取了Documents目录中的文件,您可以手动将文件粘贴到目录中使用Finder。试试这个。

    NSString *path = [[NSBundle mainBundle] pathForResource:@"test.txt" ofType:nil];
    NSString *content = [[NSString alloc] initWithContentsOfFile:path
                                                    usedEncoding:nil
                                                           error:nil];
    NSLog (@"%@",content);