重命名文件而不输入文件扩展名
Rename File without entering an file extension
Xcode7.3.1,Swift2.2
我下面的代码正在按预期重命名文件。我的问题是我想在警报文本输入字段中输入不带扩展名的 "New File Name"。然后,一旦用户按下 "Yes",文件扩展名 "m4u" 就会添加到新名称中,并最终将文件重命名为 "New File Name.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
}
}
我能够通过对上面的原始代码进行一些小改动来实现所需的功能..
在“askToRename”函数中,我修改了以下行。
发件人:
let url = NSURL(fileURLWithPath: text!)
收件人:
let url = NSURL(fileURLWithPath: text!).URLByAppendingPathExtension("m4a")
和
发件人:
textfield.text = "\(recordingURL.lastPathComponent!)"
收件人:
textfield.text = "\(recordingURL.URLByDeletingPathExtension!.lastPathComponent!)"
Xcode7.3.1,Swift2.2
我下面的代码正在按预期重命名文件。我的问题是我想在警报文本输入字段中输入不带扩展名的 "New File Name"。然后,一旦用户按下 "Yes",文件扩展名 "m4u" 就会添加到新名称中,并最终将文件重命名为 "New File Name.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
}
}
我能够通过对上面的原始代码进行一些小改动来实现所需的功能..
在“askToRename”函数中,我修改了以下行。
发件人:
let url = NSURL(fileURLWithPath: text!)
收件人:
let url = NSURL(fileURLWithPath: text!).URLByAppendingPathExtension("m4a")
和
发件人:
textfield.text = "\(recordingURL.lastPathComponent!)"
收件人:
textfield.text = "\(recordingURL.URLByDeletingPathExtension!.lastPathComponent!)"