使用NSString writeToFile的麻烦

时间:2010-07-20 12:44:19

标签: iphone objective-c file nsstring

我使用以下代码打开文件的内容并将其保存到另一个文件中。 当它运行时,原始文件长度是793但保存的文件是0.我也尝试过只复制文件。似乎没什么用。

我在文档目录中是否缺少某种权限?

NSError *error;
    NSString *basePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString* nGram = [basePath stringByAppendingPathComponent:@"contacts.gram"];
NSString *oGram = [basePath stringByAppendingPathComponent:@"/../vText.app/model/lm/TAR9230/contacts.gram"];
      NSString *gramString = [[NSString alloc] initWithContentsOfFile:oGram  encoding:NSUTF8StringEncoding error:&error];
      BOOL ok = [gramString writeToFile:nGram atomically:NO encoding:NSUnicodeStringEncoding error:&error];
      if(!ok) NSLog(@"Mayday!");
      NSLog(@"%d",[gramString length]);
      gramString = [[NSString alloc] initWithContentsOfFile:nGram  encoding:NSUTF8StringEncoding error:&error];
      NSLog(@"%d",[gramString length]);

1 个答案:

答案 0 :(得分:1)

这整个块是不必要的。您所需要的只是:

NSString *fp=[[NSBundle mainBundle] pathForResource:@"contacts" ofType:@"gram"];
NSString *gramString = [[NSString alloc] initWithContentsOfFile:fp  
                                                       encoding:NSUTF8StringEncoding 
                                                          error:&error];

您当然不希望尝试使用硬编码路径直接访问应用程序包中的文件,因为不保证文件在每个构建中都位于相同的位置。

在您拥有的代码中,您希望使用与编写时相同的编码常量进行读取。您使用NSUnicodeStringEncoding撰写,但使用NSUTF8StringEncoding阅读。这些应该重叠但是如果你知道使用的确切编码,为什么要抓住机会呢?