NSFileManager OS X 上次修改日期
Posted
技术标签:
【中文标题】NSFileManager OS X 上次修改日期【英文标题】:NSFileManager OS X Last Modify Date 【发布时间】:2016-02-03 14:24:51 【问题描述】:我对以下代码有两个问题:
1) 如何使用 NSFileManager 获取目录的最后修改/更新日期,如下所示?
2) 数组只打印最后一条记录,如何得到结果打印出来
[
["ProjectName":"Project 1", "ProjectURL":"/Users/abc/Documents/MyProjectFolder/Project 1"],
["ProjectName":"Project 2", "ProjectURL":"/Users/abc/Documents/MyProjectFolder/Project 2"]
]
我的代码如下:
let documentsDirectoryURL = try! NSFileManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
var bool: ObjCBool = false
myPath = NSURL(string: String(documentsDirectoryURL) + "MyProjectFolder")
var filevar: [String:String] = [:]
if NSFileManager().fileExistsAtPath(myPath.path!, isDirectory: &bool)
if bool.boolValue
let fileManager = NSFileManager.defaultManager()
let files = try! fileManager.contentsOfDirectoryAtURL(myPath, includingPropertiesForKeys: nil, options: [])
for file in files
let filename = file.lastPathComponent
let fileurl = file.path
if filename != ".DS_Store"
filevar = ["ProjectName":filename!, "ProjectURL": fileurl!]
print("Result:\n \(filevar)")
【问题讨论】:
【参考方案1】:1) 从 URL 中获取修改日期,并在重复循环中比较日期。
2) 创建一个数组而不是字典并附加字典。
let fileManager = FileManager.default
let documentsDirectoryURL = try! fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
var isDir: ObjCBool = false
let myPath = documentsDirectoryURL.appendingPathComponent("MyProjectFolder")
var filevar = [[String:String]]()
var latestModificationDate = Date.distantPast
var latestFileURL = URL(fileURLWithPath: "/")
if fileManager.fileExists(atPath: myPath.path, isDirectory: &isDir)
if isDir.boolValue
do
let fileURLs = try fileManager.contentsOfDirectory(at: myPath, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
for fileURL in fileURLs
let attributes = try! fileURL.resourceValues(forKeys:[.contentModificationDateKey, .nameKey])
let filename = attributes.name!
let modificationDate = attributes.contentModificationDate!
if latestModificationDate.compare(modificationDate) == .orderedAscending
latestModificationDate = modificationDate
latestFileURL = fileURL
filevar.append ( ["ProjectName":filename, "ProjectURL": fileURL.path])
catch
print(error)
print("Result:\n \(filevar)")
print(latestFileURL, latestModificationDate)
.SkipsHiddenFiles
选项可避免检查 .DS_Store
编辑:更新到 Swift 4
【讨论】:
【参考方案2】:斯威夫特 4
这里有一些代码可以从字面上获取特定 URL 的修改日期。注意:您的 url 必须有一个方案(例如 file://),这一点很重要。
func modifiedDate(atURL url: URL) -> Date?
if let attr = try? url.resourceValues(forKeys: [URLResourceKey.contentModificationDateKey])
return attr.contentModificationDate
return nil
【讨论】:
以上是关于NSFileManager OS X 上次修改日期的主要内容,如果未能解决你的问题,请参考以下文章
attributesOfItemAtPath 返回 nil (SWIFT)
NSFileManager 在 Xcode 中作为发行版构建时有效,但在作为独立 OS X Cocoa 应用程序运行时无效