【问题标题】:NSFileManager OS X Last Modify DateNSFileManager OS X 上次修改日期
【发布时间】: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)")
         }
     }

【问题讨论】:

    标签: swift macos nsfilemanager


    【解决方案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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-06
        • 2017-11-19
        • 1970-01-01
        • 1970-01-01
        • 2016-11-14
        • 2020-09-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多