2012-11-15 63 views
-2

保存力學我用:文件存在但無法打開?

NSMutableData *data = [[NSMutableData alloc] init]; 
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
    [archiver encodeObject:self forKey:@"Save"]; 
    [archiver finishEncoding]; 
    [data writeToFile:filePath atomically:YES]; 
    [archiver release]; 
    [data release]; 

我用

[[NSFileManager defaultManager] fileExistsAtPath:savePath]; 

[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[SynchronizedData createPath] error:&error] 

檢查我的文件的存在性。他們確認文件存在。

但是我不能用相同的目錄路徑

//NSData *encodedData = [[NSFileManager defaultManager] contentsAtPath:[SynchronizedData createPath]]; 

    NSData *encodedData = [[[NSData alloc] initWithContentsOfFile:tempFilePath] autorelease]; 

    if (encodedData == nil) { 
     NSLog(@"Save cannot open while loading!"); 
     return nil; 
    } 

以上encodedData加載該文件,都返回nil。 (autorelease不是問題,我查過)

任何想法有什麼不對?

我在previous thread中發現了類似的情況,我試了再保留一次我的tempFilePath,沒關係,問題依然存在。


我已經完成了比上述更簡單的機制。

從目錄中獲取NSData的問題仍未解決。可能是由於@paxdiablo提及的讀取權限。

因此我使用「文檔」文件夾而不是「庫」。 NSData打開沒有錯誤。

+0

什麼是'tempFilePath'? –

+0

tempFilePath與savePath/[SynchronizedData createPath]的路徑相同 – user1824022

+0

請NSLog tempFilePath並檢查它是否正確。 –

回答

1

文件可以存在但仍不可讀。您應該先檢查該文件的權限。

此外,使用initWithContentsOfFile:options:error:變種得到一個錯誤 - 應該有希望告訴你,如果有問題。

,並根據您的評論,你所看到的:

Cocoa error 257

它出現的權限問題。如果你看一下Foundation constants,你會看到:

NSFileReadNoPermissionError = 257

這意味着你沒有權限讀取該文件。

+0

感謝您的評論。我檢查了NSData類的引用。我想你在談論'initWithContentsOfFile:options:error:'對嗎?我有錯誤:操作無法完成。 (可可錯誤257.) – user1824022

+0

@ user1824022,那麼這是一個權限問題,因爲我認爲。從基金會常數來看,257是讀取權限失敗 - 請參閱我的更新。 – paxdiablo

+0

感謝您的評論。我發佈了我用過的保存機制。它基本上是[NSData writeToFile]。但是,我發現沒有文章提及讀取權限...... – user1824022