【问题标题】:Rename File without entering an file extension重命名文件而不输入文件扩展名
【发布时间】:2016-12-06 01:13:09
【问题描述】:

Xcode 7.3.1、Swift 2.2

我下面的代码按预期重命名文件。我的问题是我想在警报文本输入字段中输入不带扩展名的“新文件名”。然后,一旦用户按下“是”,文件扩展名“m4u”就会添加到新名称中,并最终将文件重命名为“新文件名.m4u”。我不希望用户必须处理文件扩展名。

任何帮助将不胜感激.....

func askToRename(row:Int) {

    let recording = self.arrayRecordings[row]
    let recordingURL = self.arrayRecordingsURL[row]

    let alert = UIAlertController(title: "Rename",
                                  message: "Rename Recording \(recording)?",
                                  preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "Yes", style: .Default, handler: {[unowned alert] action in
        print("yes was tapped \(self.arrayRecordingsURL[row])")
        if let textFields = alert.textFields{
            let tfa = textFields as [UITextField]
            let text = tfa[0].text
            let url = NSURL(fileURLWithPath: text!)
            self.renameRecording(recordingURL, to: url)
        }
        }))
    alert.addAction(UIAlertAction(title: "No", style: .Default, handler: {action in
        print("no was tapped")
    }))
    alert.addTextFieldWithConfigurationHandler({textfield in
        textfield.placeholder = "Enter a filename"
        textfield.text = "\(recordingURL.lastPathComponent!)"
    })
    self.presentViewController(alert, animated:true, completion:nil)
}


func renameRecording(from:NSURL, to:NSURL) {
    let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
    let toURL = documentsDirectory.URLByAppendingPathComponent(to.lastPathComponent!)

    print("renaming file \(from.absoluteString) to \(to) url \(toURL)")
    let fileManager = NSFileManager.defaultManager()
    fileManager.delegate = self
    do {
        try NSFileManager.defaultManager().moveItemAtURL(from, toURL: toURL)
    } catch let error as NSError {
        print(error.localizedDescription)
    } catch {
        print("error renaming recording")
    }
    dispatch_async(dispatch_get_main_queue(), {
        self.listRecordings()
        //            self.tableView.reloadData()
    })

}


func listRecordings() {

    let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
    do {
        let urls = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsDirectory, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles)
        self.arrayRecordingsURL = urls.filter( { (name: NSURL) -> Bool in
            return name.lastPathComponent!.hasSuffix("m4a")
        })

    } catch let error as NSError {
        print(error.localizedDescription)
    } catch {
        print("something went wrong listing recordings")
    }

}



extension ViewControllerFileManager: NSFileManagerDelegate {

func fileManager(fileManager: NSFileManager, shouldMoveItemAtURL srcURL: NSURL, toURL dstURL: NSURL) -> Bool {

    print("should move \(srcURL) to \(dstURL)")
    return true
}

}

【问题讨论】:

  • 如何在代码中添加路径扩展名。 // 让 text = tfa[0].text + ".m4u"
  • 感谢魏杰的帮助,不幸的是,这没有成功。

标签: ios swift swift2 xcode7 nsfilemanager


【解决方案1】:

我能够通过对上面的原始代码制作几个小柚木来实现所需的功能..

在“askToRename”函数中,我修改了以下几行。

发件人:

let url = NSURL(fileURLWithPath: text!)

收件人:

let url = NSURL(fileURLWithPath: text!).URLByAppendingPathExtension("m4a")

发件人:

textfield.text = "\(recordingURL.lastPathComponent!)"

收件人:

textfield.text = "\(recordingURL.URLByDeletingPathExtension!.lastPathComponent!)"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2021-07-01
    相关资源
    最近更新 更多