我有一些保存到文档目录的项目。我目前需要将这些以编程方式移动到另一个目录。我成功创建了新目录,但在使用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)")
}
我使用此代码检查我的网址。
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)")
}
以下是我尝试移动的每件商品的错误。
不能将文件移到新的媒体路径上 错误 - 错误域= NSCocoaErrorDomain代码= 516“”image_5“无法移动到”文档“,因为已存在具有相同名称的项目。” UserInfo = {NSSourceFilePathErrorKey = / Users / joseph / Library / Developer / CoreSimulator / Devices / 552B72BF-8929-40EE-A75B-4574D3D2918A / data / Containers / Data / Application / E168B872-6A1D-4D78-B460-D45194088E5B / Documents / image_5, NSUserStringVariant =( 移动 ),NSDestinationFilePath = / Users / joseph / Library / Developer / CoreSimulator / Devices / 552B72BF-8929-40EE-A75B-4574D3D2918A / data / Containers / Data / Application / E168B872-6A1D-4D78-B460-D45194088E5B / Documents / Media,NSFilePath = / Users / joseph / Library / Developer / CoreSimulator / Devices / 552B72BF-8929-40EE-A75B-4574D3D2918A / data / Containers / Data / Application / E168B872-6A1D-4D78-B460-D45194088E5B / Documents / image_5,NSUnderlyingError = 0x60000024fff0 {错误域= NSPOSIXErrorDomain代码= 17“文件存在”}}
媒体目录应为空,因为它是新创建的,因此我收到的错误有点令人困惑。它也在说它试图将它转移到'文档',但它应该转移到'媒体'。是什么导致了这个问题,我该如何解决它?我只是想将“Documents”中保存的项目移动到新目录“Media”。
答案 0 :(得分:4)
您必须将文件名附加到目标网址。根据文档:
srcURL中项目的新位置。此参数中的URL不能是文件引用URL,并且必须在其新位置包含文件或目录的名称。此参数不得为零。
答案 1 :(得分:0)
这对我有用 - 在目标路径中也添加文件名
let nameFile = (songPath as NSString).lastPathComponent
let fileDest = destinationDirectoryPath + "/" + nameFile
//Now move the song files
try fileManager.moveItem(atPath: sourceFilePath, toPath: fileDest)
答案 2 :(得分:-1)
删除旧文件(如果存在)
let url = NSUrl(string: "...")
if NSFileManager.defaultManager().fileExistsAtPath(url.path!) {
try! NSFileManager.defaultManager().removeItemAtURL(url)
}