2010-07-20 74 views
0

我正在使用以下代码打开文件的内容并将其保存到另一个文件。 当它运行原始文件长度是793但保存的文件是0.我也试过只复制文件。似乎没有任何工作。NSString出现问题writeToFile

我在文档目录上缺少某种权限吗?

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]); 
+0

如何检索文档文件夹的路径? [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];为我做了一件好事。 – samsam 2010-07-20 13:00:27

+0

对不起,忘了添加文档路径getter – Kungfurabbits 2010-07-20 13:11:19

+0

错误报告什么了吗?你似乎从来没有检查过它们。 – TechZen 2010-07-20 13:41:20

回答

1

这整个块是不必要的。所有你需要的是:

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

你肯定不会想尝试使用硬编码路径直接访问文件中的应用程序包,因为该文件不能保证在同一个确切地点在每次构建。

在你有的代码中,你希望使用相同的编码常量来读取,就像你写的一样。您使用NSUnicodeStringEncoding填写,但您使用NSUTF8StringEncoding阅读。这些应该重叠,但为什么要抓住机会,如果你知道使用的确切编码?

+0

这是问题; NSUnicodeStringEncoding => NSUTF8StringEncoding;我错过了一些,非常感谢。 – Kungfurabbits 2010-07-20 14:15:39

+0

一边注意,是递归的pathForResource?从你的代码看来它是。再次感谢。 – Kungfurabbits 2010-07-20 14:16:50

+1

是的,它会在应用程序包中找到资源,而不管它是什么。如果需要,可以使用'pathForResource:ofType:inDirectory:'或相关方法来缩小范围。 – TechZen 2010-07-20 14:23:07