如何将文件从目录复制到iphone文档目录

我想要做的是,在应用程序委托,我想写一个代码,将复制一个SQLite数据库,如果它不存在于iPhone的文档目录。 为此,我正在使用以下代码 –

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { window = UIWindow(frame: UIScreen.mainScreen().bounds) let containerViewController = ContainerViewController() window!.rootViewController = containerViewController window!.makeKeyAndVisible() //Create database if not exists let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String let databaseStr = "LocalDatabase.sqlite" let dbPath = docsPath.stringByAppendingPathComponent(databaseStr) let fileManager: NSFileManager = NSFileManager.defaultManager() if !fileManager.fileExistsAtPath(dbPath) { let databaseInApp: String? = NSBundle.mainBundle().resourcePath?.stringByAppendingPathComponent(databaseStr) fileManager.copyItemAtPath(databaseInApp!, toPath: dbPath, error: nil) } return true } 

它是在确定的目录中创build数据库。 但是我没有在数据库中获得ant表。 这意味着新文件被创build而不是复制。 我确信在那个数据库中有9个表格是我想要复制的。

文件结构如屏幕截图所示 –

在这里输入图像说明

我错在哪里,我不明白。 请告诉我,如果有人能够解决问题。 还有一件事当我用/Users/Adelantelabs/Documents/Sidemenu.swift/SlideOutNavigation/Localdatabase.sqlite在模拟器中运行应用程序然后,它运行完美,但在我运行它时没有在iphone中工作。

使用此代码:

 let fileManager = NSFileManager.defaultManager() var error : NSError? var doumentDirectoryPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString let destinationPath = doumentDirectoryPath.stringByAppendingPathComponent("LocalDatabase1.sqlite") let sourcePath = NSBundle.mainBundle().pathForResource("LocalDatabase", ofType: "sqlite") fileManager.copyItemAtPath(sourcePath!, toPath: destinationPath, error: &error) 
  func copyDatabase(){ let fileManager = NSFileManager.defaultManager() let dbPath = getDBPath() var success = fileManager.fileExistsAtPath(dbPath) if(!success) { if let defaultDBPath = NSBundle.mainBundle().pathForResource("LocalDatabase", ofType: "sqlite"){ var error:NSError? success = fileManager.copyItemAtPath(defaultDBPath, toPath: dbPath, error: &error) println(defaultDBPath) if (!success){ println("Failed to create writable database file with message\(error!.localizedDescription))") } }else{ println("Cannot Find File In NSBundle") } }else{ println("File Already Exist At:\(dbPath)") } } func getDBPath()->String { let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) let documentsDir = paths[0] as! String let databasePath = documentsDir.stringByAppendingPathComponent("LocalDatabase.sqlite") return databasePath; } 

然后在didFinishLaunching调用它:

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { copyDatabase() return true } 

Swift 3.0版本

 let fileManager = FileManager.default var doumentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString let destinationPath = doumentDirectoryPath.appendingPathComponent("LocalDatabase.sqlite") let sourcePath = Bundle.main.path(forResource: "LocalDatabase", ofType: "sqlite") do{ try fileManager.copyItem(atPath: sourcePath!, toPath: destinationPath) }catch let error as NSError { print("error occurred, here are the details:\n \(error)") }