createFileAtPath:contents:attributes:给出“没有这样的文件或目录”的错误

问题描述:

我想写一个简单的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'。尝试一下,让我知道,如果有帮助,我会尽量发布一个答案。 –

通过

NSDocumentDirectory 

更换NSDocumentationDirectory'我觉得应该是

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

我觉得这一行使得问题:

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:高兴:)感谢评论:) –