2010-07-20 80 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