gpt4 book ai didi

macos - 在 OS X 中设置文件时间戳的 API

转载 作者:行者123 更新时间:2023-12-03 16:37:16 25 4
gpt4 key购买 nike

我想在 PC(Win7、NTFS)和 Mac(OS X、HFS+)之间(双向)同步文件。我尝试过使用很多现有的工具/方法(Unison、SyncToy 或其他在 Samba 共享上工作的软件等),但它们都无法保留我的文件上的文件创建时间戳(因此向前称为 FCT),这对我来说是 Not Acceptable 。

Unison 不理解 FCT 的概念,可能是因为它主要是根据 Unix 构建的(请参阅 my Unison forum post)

当访问 OS X 提供的 SMB 共享时,Windows 无法获取(或设置)FCT。在这种情况下,它会显示并设置文件修改时间来代替 FCT(不过,这里应归咎于 Samba,而不是 Windows),因此类似 SyncToy无法使用。

另一方面,OS X 在使用 Windows 提供的 SMB 共享时可以获取和设置 FCT。这是一个很好的发现,因为我认为我可以编写一个在 OS X 上运行的 Python 程序,使用 cp 复制文件,在本地文件和 SMB 共享之间进行文件同步。当我发现使用 cp -p 选项未保留 FCT 时,结果证明这也是行不通的。仅当通过 Finder GUI 复制文件时才会保留 FCT。

因此,我决定自己编写一个文件同步实用程序,可能使用 Python,其实例将分别在 PC 和 Mac 上运行,通过 ssh 进行通信。由于 Python 本身没有可靠的方法来获取或设置 FCT,因此我决定为 Python 为此目的与之对话的每个平台构建一个 native 帮助程序应用程序。 (要么用 C 语言编写 Python 模块,但我相信这样做会更复杂)

这让我想到了一个问题 - 在 OS X 中设置文件时间戳的 API 是什么?

我希望构建一个控制台应用程序,我的 Python 脚本可以通过 STDIN 和 STDOUT 与其进行通信。基本上我正在寻找 GetFileTime 的 OS X 等效项和SetFileTime

我可以用 C 做的事情会很棒,因为我没有 Objective C 开发经验。

最佳答案

Cocoa 更改文件属性的方法是使用 NSFileManager:

NSError* error = nil;
NSString* filePath = [@"~/Desktop/test.txt" stringByExpandingTildeInPath];
if(![[NSFileManager defaultManager] setAttributes:@{NSFileCreationDate : [NSDate date]} ofItemAtPath:filePath error:&error])
{
NSLog(@"Setting file creation date attribute failed with error:%@", error);
}

您可以在 Foundation 命令行实用程序中使用上述代码。

如果您更喜欢纯 C,则可以使用 POSIX stat 代替: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/stat.2.html

关于macos - 在 OS X 中设置文件时间戳的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16296903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com