Невозможно скопировать файл из каталога в каталог документов в iOS

Я пытаюсь скопировать файл из моего пакета в каталог документов в iOS со следующим кодом.

let bundlePath = NSBundle.mainBundle().pathForResource("information", ofType: ".png") print(bundlePath, "\n") //prints the correct path let destPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! let fileManager = NSFileManager.defaultManager() let fullDestPath = NSURL(fileURLWithPath: destPath).URLByAppendingPathComponent("information.png") let fullDestPathString = String(fullDestPath) print(fileManager.fileExistsAtPath(bundlePath!)) // prints true do{ try fileManager.copyItemAtPath(bundlePath!, toPath: fullDestPathString) }catch{ print("\n") print(error) } 

Error Domain = NSCocoaErrorDomain Code = 4 «Файл« information.png »не существует». UserInfo = {NSSourceFilePathErrorKey = / Пользователи / macbookpro / Библиотека / Разработчик / CoreSimulator / Devices / E58CA1C6-C6F1-4D72-9572-3925675E78A5 / data / Контейнеры / Пакет / Приложение / EFA83E02-5F24-4BB3-B32A-7E755081A730 / AutoLayout tuts.app /information.png, NSUserStringVariant = (Копировать), NSDestinationFilePath = файл: /// Пользователи / macbookpro / Библиотека / Разработчик / CoreSimulator / Devices / E58CA1C6-C6F1-4D72-9572-3925675E78A5 / data / Контейнеры / Данные / Приложение / 86A1BDD5- FAF2-486E-85A9-CF72A547C6CD / Documents / information.png, NSFilePath = / Пользователи / macbookpro / Библиотека / Разработчик / CoreSimulator / Devices / E58CA1C6-C6F1-4D72-9572-3925675E78A5 / data / Контейнеры / Пакет / Приложение / EFA83E02-5F24 -4BB3-B32A-7E755081A730 / AutoLayout tuts.app/information.png, NSUnderlyingError = 0x7fb53251cd80 {Ошибка домена = NSPOSIXErrorDomain Code = 2 «Нет такого файла или каталога»}}

В fileManager.fileExistsAtPath() файл действительно существует. Что я делаю не так?

Проблема в этой строке:

 let fullDestPathString = String(fullDestPath) 

Должен быть:

 let fullDestPathString = fullDestPath.path 

Посмотрите на ошибку. Проблема заключается в назначении. Обратите внимание на file:/// . Ваш код неправильно конвертирует URL-адрес в путь к файлу. Вам нужно использовать свойство path для NSURL чтобы получить путь в виде строки.

Во всей вашей отладке и проверке вы никогда не проверяли значение fullDestPathString .

Пожалуйста, найдите код Below.i, взяв ссылку с ответа @ rmaddy.

 func CheckDataBaseOnPathorNot() -> Void { let bundlePath = Bundle.main.path(forResource: "Project_Expert", ofType: ".db") print(bundlePath ?? "", "\n") //prints the correct path let destPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! let fileManager = FileManager.default let fullDestPath = NSURL(fileURLWithPath: destPath).appendingPathComponent("Project_Expert.db") let fullDestPathString = fullDestPath!.path print(fileManager.fileExists(atPath: bundlePath!)) // prints true if fileManager.fileExists(atPath: fullDestPathString) { print("File is available") }else{ do{ try fileManager.copyItem(atPath: bundlePath!, toPath: fullDestPathString) }catch{ print("\n") print(error) } } } 

Проверьте этот код, если файл недоступен на пути, а затем скопируйте файл.

Спасибо.

для получения строкового пути вы должны использовать этот

 let path = fullDestPath.path 

На боковой ноте

 fileManager.fileExistsAtPath(bundlePath!) == true 

это способ проверить, действительно ли значение true

 fileManager.fileExistsAtPath(bundlePath!) 

только это может иметь некоторые проблемы

Swift 3

 func copyfileToDocs() { let bundlePath = Bundle.main.path(forResource: "db", ofType: ".sqlite") print(bundlePath!, "\n") //prints the correct path let destPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! let fileManager = FileManager.default let fullDestPath = NSURL(fileURLWithPath: destPath).appendingPathComponent("db.sqlite") let fullDestPathString = fullDestPath?.path print(fileManager.fileExists(atPath: bundlePath!)) // prints true do { try fileManager.copyItem(atPath: bundlePath!, toPath: fullDestPathString!) print("DB Copied") } catch { print("\n") print(error) } } 
Давайте будем гением компьютера.