У меня есть несколько элементов, которые сохранены в каталоге документов. В настоящее время мне нужно, чтобы их программно переместили в другой каталог. Я успешно создал новый каталог, но, похоже, он не смотрит на него при использовании FileManager.default.moveItem.
Код, используемый для созданного каталога.
let path = getDocumentsDirectory().appendingPathComponent("Media").path
do{
try FileManager.default.createDirectory(atPath: path, withIntermediateDirectories: false, attributes: nil)
print("\nDIRECTORY 'Media' CREATED")
}catch {
print("\nDIRECTORY 'Media' WAS NOT ABLE TO BE CREATED")
print("ERROR - \(error)")
}
Я использую этот код для проверки своего URL.
let mediaURL = getDocumentsDirectory().appendingPathComponent("Media")
print("\nMEDIA URL: \(mediaURL)")
Что выводит это.
MEDIA URL:file:///Users/joseph/Library/Developer/CoreSimulator/Devices/552B72BF-8929-40EE-A75B-4574D3D2918A/data/Containers/Data/Application/E168B872-6A1D-4D78-B460-D45194088E5B/Documents/Media/
Вот код, который я использую для перемещения предметов.
do{
try FileManager.default.moveItem(at: url, to: mediaURL)
print("\nFILE MOVED TO NEW MEDIA PATH SUCCESSFULLY")
}catch {
print("\nCOULDN'T MOVE FILE TO NEW MEDIA PATH")
print("ERROR - \(error)")
}
Вот ошибка, которую я получаю для каждого предмета, который я пытаюсь переместить.
НЕ МОЖЕТ ПЕРЕМЕСТИТЬ ФАЙЛ НА НОВЫЙ ПУТЬ В МЕДИА ОШИБКА - Error Domain = NSCocoaErrorDomain Code = 516 «« image_5 »не может быть перемещено в« Документы », поскольку элемент с таким именем уже существует». UserInfo = {NSSourceFilePathErrorKey = / Users / joseph / Library / Developer / CoreSimulator / Devices / 552B72BF-8929-40EE-A75B-4574D3D2918A / data / Containers / Data / Application / E168B872-6A1D-4D78-B460-D45194088E / Documents NSUserStringVariant = ( Двигаться ), NSDestinationFilePath = / Users / joseph / Library / Developer / CoreSimulator / Devices / 552B72BF-8929-40EE-A75B-4574D3D2918A / data / Containers / Data / Application / E168B872-6A1D-4D78-B460-D45194088E5B / DocumentsPath, NSFath / Media = / Users / joseph / Library / Developer / CoreSimulator / Devices / 552B72BF-8929-40EE-A75B-4574D3D2918A / data / Containers / Data / Application / E168B872-6A1D-4D78-B460-D45194088E5B / Documents / image_5, NSUnderlyingEr600 Ошибка домена = NSPOSIXErrorDomain Code = 17 "Файл существует"}}
Каталог мультимедиа должен быть пустым, поскольку он создается недавно, поэтому получаемая мной ошибка немного сбивает с толку. Также говорится, что он пытается переместить его в «Документы», но он должен быть перемещен в «Медиа». Что вызывает эту проблему и как я могу ее решить? Я просто пытаюсь переместить элементы, сохраненные в «Документах», в новый каталог «Медиа».





Вы должны добавить имя файла к целевому URL-адресу. Согласно документам:
The new location for the item in srcURL. The URL in this parameter must not be a file reference URL and must include the name of the file or directory in its new location. This parameter must not be nil.
Спасибо! Это сработало. Я знал об остальном, но не знал, что это нужно добавить.
Спасибо! Это сработало.
Удалите старый файл, если он существует
let url = NSUrl(string: "...")
if NSFileManager.defaultManager().fileExistsAtPath(url.path!) {
try! NSFileManager.defaultManager().removeItemAtURL(url)
}
Обновлять:
Swift 5.1.2
let url = URL(string: mp3FilePath)
if FileManager.default.fileExists(atPath: url!.path) {
try! FileManager.default.removeItem(at: url!)
}
Это сработало для меня - добавьте имя файла в путь назначения
let nameFile = (songPath as NSString).lastPathComponent
let fileDest = destinationDirectoryPath + "/" + nameFile
//Now move the song files
try fileManager.moveItem(atPath: sourceFilePath, toPath: fileDest)
Вы можете попробовать добавить имя файла к месту назначения