MacOS 和快速更改/设置文件创建日期

Posted

技术标签:

【中文标题】MacOS 和快速更改/设置文件创建日期【英文标题】:MacOS and swift change/set file creationDate 【发布时间】:2017-03-12 00:55:57 【问题描述】:

macOS sierra、iMac、swift3

我正在尝试编写一个更改文件创建日期的程序。 我有很多扫描的照片和文档,我希望能够按字母或时间顺序存储。

我已经在 Objective-C 中实现了这一点,但我在 swift 中苦苦挣扎。 Apple API > Foundation > FileManager > setAttributes 实例方法应该可以解决我的问题。 实例方法-----setAttributes(:ofItemAtPath:) 声明 --- f**c setAttributes( attributes: [FileAttributeKey : Any], ofItemAtPath path: String) throws

我无法编写这行代码使其能够编译。

var isChangedBoolean = try fm.setAttributes(myAttributesDictionary: [FileAttributeKey : creationDate],ofItemAtPath : myPath)
############## 我的代码
    let fm = FileManager()
    let myPath = "/Users/jon/a-1.jpg"  //original date  30/1/2013  = d/m/y

    //Convert date string to date object
    let myDateString = "24/11/2014"  // required date
    let dateFmt = DateFormatter()
    //dateFmt.timeZone = NSTimeZone.default
    dateFmt.dateFormat = "dd/MM/yyyy"
    let myDateObject = dateFmt.date(from : myDateString)
    print("myDateString :\(myDateString) myDateObj :\(myDateObject!)")

    //declare Mutable Dictionary with key : creationDate   and my value
    var myAttributesDictionary = [FileAttributeKey : Date]()
    myAttributesDictionary[FileAttributeKey.creationDate] = myDateObject

    print("-----------------  mtAttributesDictionary")
    print(myAttributesDictionary)
    print(myAttributesDictionary[FileAttributeKey.creationDate]!)  // works
    print("### Will print myAttributesDictionary and a value for the key")   // works

    do
    
        let fileAttributes =  try fm.attributesOfItem(atPath : myPath)  //works
        //print(fileAttributes)
        print("### Will print File Attributes")
    
    catch let error as NSError
       print("ERROR  READ Attributes: \(error)") 


    do
    
        print("### Will print my creationDateObject  :: \(myAttributesDictionary[FileAttributeKey.creationDate]!)")
 //  This line is my problem.  I cannot write a line of code that will compile
 //  var isChangedBoolean = try fm.setAttributes(myAttributesDictionary: [FileAttributeKey : creationDate],ofItemAtPath : myPath)
    
    catch let error as NSError
       print("ERROR    ERROR  in setAttributes: \(error)") 

     

输出 ----- 我的日期字符串:24/11/2014 我的日期对象:2014-11-23 13:00:00 +0000 我的属性字典 [__C.FileAttributeKey(_rawValue: NSFileCreationDate): 2014-11-23 13:00:00 +0000] 2014-11-23 13:00:00 +0000 ### 将打印 myAttributesDictionary 和键的值 ### 将打印文件属性 ### 将打印我的 creationDateObject :: 2014-11-23 13:00:00 +0000

如果有问题的代码行未注释,它将无法编译。我已经写了至少 50 次,并且有许多不同类型的编译器错误。我只是不明白 API 需要什么,也找不到工作示例。 任何建议将不胜感激。一个解决方案将更加感激。 谢谢。

【问题讨论】:

【参考方案1】:

我是不是把事情弄复杂了。

let mypath = "/path/to/file"
let myDateObject = NSDate()       // NSDate()  is todays date

let attributes = [FileAttributeKey.creationDate: myDateObject]

do 
        try FileManager.default.setAttributes(attributes, ofItemAtPath: myPath)
   
  catch 
  
        print(error)
  

【讨论】:

以上是关于MacOS 和快速更改/设置文件创建日期的主要内容,如果未能解决你的问题,请参考以下文章

Java压缩正在改变创建文件的日期

如何在mac上使用python更改文件的创建日期?

如何更改 Windows 文件的文件创建日期?

怎么更改文件修改时间?

无法删除Joomla模板中的创建日期

获取 MacOS 文件夹/文件 ID C#