2013-01-22 121 views
1

我想寫一個簡單的createDB函數。如果數據庫文件不存在,我想創建它並繼續。但是當我嘗試創建文件時,我收到了「No such file or directory」錯誤。createFileAtPath:contents:attributes:給出「沒有這樣的文件或目錄」的錯誤

以下是代碼片段:

-(void) createDB 
{ 
    NSString* docsDir; 
    NSArray* dirPaths; 

    // Get directory path 
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);  
    docsDir = [dirPaths objectAtIndex:0]; 
    dbPath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"players.db"]]; 
    NSFileManager* fileMgr = [NSFileManager defaultManager]; 


    if([fileMgr fileExistsAtPath:dbPath] == NO) 
    { 
     //Create the file in main application folder 
     //dbPath = [[NSBundle mainBundle] pathForResource:@"players" ofType:@".db"]; 

     if (![fileMgr createFileAtPath:dbPath contents:nil attributes:nil]) 
      NSLog(@"Error was code: %d - message: %s", errno, strerror(errno)); 
     // Above NSLog Prints : Error was code: 2 - message: No such file or directory 

     NSLog(@"DB PAth : %@",dbPath); 
     //Prints "DB Path : /Users/myname/Library/Application Support/iPhone Simulator/6.0/Applications/016E0BD6-E615-4031-A9E4-42E42D863ECB/Library/Documentation/" 


     if(sqlite3_open_v2([dbPath UTF8String], &playerDB, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL) == SQLITE_OK) 
     { 
      char* errorMsg; 
      const char* sql_stmt = "CREATE TABLE IF NOT EXISTS PLAYERS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, GAME TEXT, GAME_DESC TEXT, DOB TEXT, IMAGE BLOB);"; 
      if (sqlite3_exec(playerDB, sql_stmt, nil, nil, &errorMsg) != SQLITE_OK) 
      { 
       NSLog(@"%s Create Table '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(playerDB), sqlite3_errcode(playerDB)); 
      } 
     } 
     else 
      NSLog(@"%s Open DB '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(playerDB), sqlite3_errcode(playerDB)); 
    } 
} 

請讓我知道如果任何人有任何輸入。

+1

您在調用'NSSearchPathForDirectoriesInDomains()'時使用'NSDocumentationDirectory',但我認爲它應該是'NSDocumentDirectory'。嘗試一下,讓我知道,如果有幫助,我會盡量發佈一個答案。 –

回答

0

通過

NSDocumentDirectory 

更換NSDocumentationDirectory'我覺得應該是

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
0

我覺得這一行使得問題:

NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); 

這應該是:

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

NSDocumentationDirectory

Documentation. 

Available in iOS 2.0 and later. 

Declared in NSPathUtilities.h. 

NSDocumentDirectory

Document directory. 

Available in iOS 2.0 and later. 

Declared in NSPathUtilities.h. 

檢查NSSearchPathDirectory瞭解更多詳情。

+0

感謝Midhun MP。這確實解決了問題:) – Sagrian

+0

@Sagar:高興:)感謝評論:) –

相關問題