我需要更改 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 的文档