【问题标题】:Error when attempting to move item using FileManager尝试使用 FileManager 移动项目时出错
【发布时间】:2018-10-05 08:45:17
【问题描述】:

我有一些项目保存到文档目录中。我目前需要以编程方式将它们移动到另一个目录。我成功创建了新目录,但是在使用 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=0x60000 {错误域=NSPOSIXErrorDomain Code=17 "文件存在"}}

媒体目录应该是空的,因为它是新创建的,所以我收到的错误有点令人困惑。它还说它正在尝试将其移至“文档”,但它应该移至“媒体”。是什么导致了这个问题,我该如何解决?我只是想将保存在“文档”中的项目移动到新目录“媒体”中。

【问题讨论】:

  • 你可以尝试将文件名追加到目的地

标签: ios swift xcode nsfilemanager


【解决方案1】:

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

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

【讨论】:

  • 谢谢!那行得通。我知道其余的,但不知道必须附加它。
【解决方案2】:

如果存在则删除旧文件

let url = NSUrl(string: "...")
if NSFileManager.defaultManager().fileExistsAtPath(url.path!) {
    try! NSFileManager.defaultManager().removeItemAtURL(url)
}

更新:

斯威夫特 5.1.2

let url = URL(string: mp3FilePath)
if FileManager.default.fileExists(atPath: url!.path) {
    try! FileManager.default.removeItem(at: url!)
}

【讨论】:

    【解决方案3】:

    这对我有用 - 在目标路径中也添加文件名

    let nameFile = (songPath as NSString).lastPathComponent
    let fileDest = destinationDirectoryPath + "/" + nameFile
    //Now move the song files
    try fileManager.moveItem(atPath: sourceFilePath, toPath: fileDest)
    

    【讨论】:

      猜你喜欢
      • 2020-12-26
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      相关资源
      最近更新 更多