2012-12-04 435 views
-2

我正在使用以下代碼將數據庫文件複製到其他文件夾中以創建臨時寫入文件。無法將數據庫文件複製到其他文件夾

BOOL success; 
NSArray*dirPath; 
NSString*docDir; 
NSString*databasePath; 
NSString*[email protected]"EXPENSES"; 

//path for database 
dirPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
docDir=[dirPath objectAtIndex:0]; 
databasePath=[docDir stringByAppendingPathComponent:databaseName]; 

NSLog(@" docDir %@",docDir); 
//check if present 
NSFileManager*fm=[NSFileManager defaultManager]; 
success=[fm fileExistsAtPath:databasePath]; 

if(success) 
{ 
    NSLog(@"DATA BASE Already present"); 
} 
else 
{ 

    //Copy from bundle to DocumentsDirectory on first run. Where DB won't be available in DocumentsDirectory. 
    NSString*bundlePath=[[NSBundle mainBundle] pathForResource:@"EXPENSES" ofType:@""]; 
    NSError*error; 
    success=[fm copyItemAtPath:bundlePath toPath:databasePath error:&error]; 

    if(success) 
    { 
     NSLog(@"DATA BASE Created successfully"); 
    } 

} // End of else when DB not present in documents directory. 

但該文件沒有複製,而不是應用程序崩潰與錯誤「的理由:‘* - [的NSFileManager copyItemAtPath:toPath:錯誤:]:源路徑是零’」請幫我調試代碼謝謝

回答

1

你在這裏犯了兩個錯誤。

  1. 你沒有提到你的目標文件擴展名

    而不是NSString*[email protected]"EXPENSES";

    使用NSString*[email protected]"EXPENSES.sqlite";

  2. 此代碼是實際的問題:

    NSString*bundlePath=[[NSBundle mainBundle] pathForResource:@"EXPENSES" ofType:@""]; 
    

這裏你告訴NSFileManager找到名稱爲"EXPENSES"的文件,它的擴展名是""可能沒有這些標準的文件。所以源路徑是nil。這就是應用程序崩潰的原因。

通常數據庫文件的擴展名爲sqlite。替換你的代碼,如:

NSString*bundlePath=[[NSBundle mainBundle] pathForResource:@"EXPENSES" ofType:@"sqlite"]; 
+0

我還沒有提到任何擴展,在它工作之前,但我沒有知道發生了什麼突然它現在不工作 – Deepak

+0

@Deepak:請檢查該文件仍然在主包 –

+0

感謝您的快速回復。它仍然在主要捆綁中。 – Deepak

0

嘗試在ofType中添加ofType的數據庫數據庫擴展:
NSString*bundlePath=[[NSBundle mainBundle] pathForResource:@"EXPENSES" ofType:@"<extension>"];錯誤提示無法找到指定的文件。

+0

我還沒有提到任何擴展,在它工作之前,但我不知道突然發生了什麼,它不工作現在 – Deepak

+0

NSLog記錄路徑並檢查文件是否存在以及文件名。如果它以前工作,沒有理由爲什麼它應該突然停止工作。 – akdsouza

+0

感謝您的快速回復。現在我發現bundlePath是空的。這是什麼問題(這是什麼意思) – Deepak

0

我已經出來了這個問題。我不知道它背後的邏輯,我只是​​從SVN導出新的數據庫,並添加到我的項目捆綁它的工作完美罰款

相關問題