2011-04-24 82 views
1

這可能是一個非常容易解決的問題,但我沒有成功。我已經將文件「questions_famquiz_easy_110326.txt」複製到資源文件夾中,並且現在想要訪問(讀取)它和NSLog以查看我能夠讀取它。Objective-C /無法在「Resources」文件夾中訪問(讀取)文件

下面的代碼是基於我在網上找到的例子所做的一個測試。

我試圖訪問資源文件夾中的txt文件,但未能這樣做。我已經搜索了一個解決方案,測試了很多,但沒有成功。

我用下面的代碼測試:

NSLog(@"\n \n >>>>>>viewDidLoad<<<<<<<<<"); 

NSError *error; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *filePath = [docsDirectory stringByAppendingPathComponent:@"questions_famquiz_easy_110326.txt"]; 

if(![fileManager fileExistsAtPath:filePath]) 
{ 
    NSData *data = [NSData dataWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/questions_famquiz_easy_110326.txt"]]; 
    [data writeToFile:filePath atomically:YES]; 
} 

NSString *myString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; 
NSLog(@"myString: %@", myString); 

NSLog(@"\n \n>>>>>>DONE WITH viewDidLoad<<<<<<<<<"); 

exit(0); //====EXIT JUST FOR THE TEST====<<< 

上面的代碼位於被啓動的第一個的viewController。

輸出我得到的是:

>>>>>>viewDidLoad<<<<<<<<< 
2011-04-24 21:53:47.825 FamQuiz_R0_1[542:307] myString: (null) 
2011-04-24 21:53:51.044 FamQuiz_R0_1[542:307] 
>>>>>>DONE WITH viewDidLoad<<<<<<<<< 

有人能很好的幫助我解決這個問題?

更新:

這裏是文件路徑:

2011-04-24 22:38:08.562 FamQuiz_R0_1[637:307] filePath: /var/mobile/Applications/7F5FDB03-0D22-46BC-91BC-4D268EB4BBEB/FamQuiz_R0_1.app/questions_famquiz_easy_110326.txt 

下面是其中i已放置在文件: enter image description here

問題迎刃而解:

NSString *myString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; 

當我使用上面的代碼時,它不起作用,當我用下面的代碼工作並打印出文本時。

NSString *myString = [[NSString alloc] initWithContentsOfFile:filePath]; 
+0

嘗試在你內部插入一個'NSLog()'if-case('if(![fileManager fileExistsAtPath:filePath])')並告訴它是否被執行。 – cweinberger 2011-04-24 20:14:25

+0

我沒有放過NSLog,但沒有命中。 – PeterK 2011-04-24 20:23:30

+0

您是否重新檢查filePath處的文件?我想在第一次運行它沒有找到,所以它創建了空文件。請輸出filePath至控制檯 – cweinberger 2011-04-24 20:29:27

回答

1

您沒有從資源文件夾讀取數據。您正試圖從文檔目錄中讀取。因此,返回零是有道理的,因爲文件不存在那裏。

變化:

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *filePath = [docsDirectory stringByAppendingPathComponent:@"questions_famquiz_easy_110326.txt"]; 

到:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"questions_famquiz_easy_110326" ofType:@"txt"]; 

,它應該爲你工作。

+0

沒有沒有工作 – PeterK 2011-04-24 20:35:55

+0

我編輯了答案,我有路徑變量名爲fullPath而不是filePath。如果您複製並粘貼了我的答案,請檢查名稱是否正確。如果您已經更正了該問題,請確保該文件實際上位於您的應用程序包中。在取景器中打開包裝並檢查它。該文件可能不在複製構建階段。 – McCygnus 2011-04-24 20:44:31