通过 Swift 代码更改 kMDItemDateAdded (“添加日期”) 文件的元数据属性

问题描述 投票:0回答:1

我需要更改 kMDItemDateAdded (“添加日期”)文件的元数据属性。

没有这样的能力

var attrs: [FileAttributeKey: Date] = [:]
//no ability to change FileAttributeKey.dateAdded - it is absent
attrs[FileAttributeKey.modificationDate] = Date.now 

try FileManager.default.setAttributes(attrs, ofItemAtPath: file.path)

我找到的只是C语言代码:

#include <stdlib.h>
#include <string.h>
#include <sys/attr.h>
#include <unistd.h>

/*
 * Set kMDItemDateAdded of path.
 *
 * Returns:
 *   • 0 on success
 *   • 1 if a system call failed: check errno
 */
int set_date_added(const char* path, struct timespec in) {
    attrgroup_t request_attrs = ATTR_CMN_ADDEDTIME;

    struct attrlist request;
    memset(&request, 0, sizeof(request));
    request.bitmapcount = ATTR_BIT_MAP_COUNT;
    request.commonattr = request_attrs;

    typedef struct {
        struct timespec added;
    } __attribute__((aligned(4), packed)) request_buf_t;

    request_buf_t request_buf;
    request_buf.added.tv_sec = in.tv_sec;
    request_buf.added.tv_nsec = in.tv_nsec;

    int err = setattrlist(path, &request, &request_buf, sizeof(request_buf), 0);
    if (err != 0) {
        return 1;
    }

    return 0;
}

你能帮我将“set_date_added”函数转移到swift代码吗?

我现在所拥有的就是:

import Darwin

func setDateAdded(path: String, toDate: Date) -> Bool {
    guard FileManager.default.fileExists(atPath: path) else { return false }

    var request = attrlist()
    request.bitmapcount = UInt16(ATTR_BIT_MAP_COUNT)
    request.commonattr  = attrgroup_t(ATTR_CMN_ADDEDTIME)
    
    ////////////
    // "Cannot find request_buf_t" in scope" error shown - have no idea what I need to import to use "request_buf_t"
    ////////////
    var request_buf = request_buf_t() 
    
    ////////////
    // ???
    ////////////
    
    setattrlist(path, &request, request_buf, sizeof(request_buf), 0)
    
    return true
}

也许这会有所帮助:setattrlist 的文档

c swift macos darwin
1个回答
0
投票

如何在 Swift 中在准确的时间安排 iOS 通话? 向我展示了 Swift 中的

struct timespec
以及如何使用它。

如何在 Swift 中创建打包数据结构?已经被问到了。

© www.soinside.com 2019 - 2024. All rights reserved.