我目前正试图在路径上创建歌曲列表 " /音乐/ iTunes / iTunes媒体/音乐"最终将它们插入到Youtube API中。 我可以访问所有需要的文件。我正在寻找一种清理打印物品的方法,如下图所示,专辑名称位于歌曲名称的前面。
var test = try FileManager.default.subpathsOfDirectory (atPath: completePath)
let list = test.joined(separator: "\n")
// Attempt to delete album name
print(list.replacingOccurrences(of: "/\(String())/" , with: ""))
打印
J. Cole/2014 Forest Hills Drive
J. Cole/2014 Forest Hills Drive/12 Love Yourz.mp3
J. Cole/2014 Forest Hills Drive/06 Fire Squad.mp3
J. Cole/2014 Forest Hills Drive/09 No Role Modelz.mp3
有没有办法删除那部分?为了返回例子 "学家Cole 12 Love Yourz.mp3"
答案 0 :(得分:0)
在Swift中,您应该使用URL
而不是路径来引用文件。因此,使用subpathsOfDirectory
' s FileManager
而不是enumerator(at:includingPropertiesForKeys:options:errorHandler:)
。此方法返回的枚举器将为目录中的每个子路径提供URL
。不幸的是,DirectoryEnumerator
在其界面中有点像Objective-C-ish,意味着它的元素是Any
而不是URL
,就像你期望的那样,但是你可以访问它URL
是这样的:
for each in enumerator {
guard let eachURL = each as? URL, eachURL.pathExtension == "mp3" else { continue }
let trackName = eachURL.lastPathComponent
let albumName = eachURL.deletingLastPathComponent().deletingLastPathComponent().lastPathComponent
print("\(albumName) \(trackName)")
}
然后,您可以使用URL
的{{1}}属性来获取文件名而不使用其余路径。对表示专辑的目录执行相同操作,您可以将专辑名称和曲目名称拼接在一起以获得所需内容。
答案 1 :(得分:0)
以下是一种过滤和组合您从subpathsOfDirectory
获得的路径的方法:
var test = try FileManager.default.subpathsOfDirectory (atPath: completePath)
var list = test.flatMap {
let pathComps = $0.components(separatedBy: "/")
return pathComps.count >= 3 ? pathComps[0] + " " + pathComps.last! : nil
}.joined(separator: "\n")
print(list)
输出:
学家Cole 12 Love Yourz.mp3
J. Cole 06 Fire Squad.mp3
J. Cole 09 No Role Modelz.mp3