尝试使用FileManager移动项目时出错

问题描述 投票:1回答:2

我有几个项目保存到文档目录。我目前需要将这些以编程方式移动到另一个目录。我成功创建了新目录,但在使用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)")
}

这是我尝试移动的每个项目的错误。

可能不会将文件移动到新的媒体路径错误 - 错误域= 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 =(Move),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”。

ios swift xcode nsfilemanager
2个回答
4
投票

您必须将文件名附加到目标URL。根据文档:

srcURL中项目的新位置。此参数中的URL不能是文件引用URL,并且必须在其新位置包含文件或目录的名称。此参数不得为零。


-1
投票

删除旧文件(如果存在)

let url = NSUrl(string: "...")
if NSFileManager.defaultManager().fileExistsAtPath(url.path!) {
    try! NSFileManager.defaultManager().removeItemAtURL(url)
}
© www.soinside.com 2019 - 2024. All rights reserved.