Macos 用于在OS X中设置文件时间戳的API

Macos 用于在OS X中设置文件时间戳的API,macos,cocoa,synchronization,rsync,filetime,Macos,Cocoa,Synchronization,Rsync,Filetime,我想(双向)同步PC(Win7,NTFS)和Mac(OS X,HFS+)之间的文件。我尝试过使用很多现有的工具/方法(Unison、SyncToy或其他在Samba共享上工作的软件等),但没有一个能够在我的文件上保留文件创建时间戳(因此称为FCT),这是我无法接受的 Unison不理解FCTs的概念,可能是因为它主要是在考虑Unix的情况下构建的(请参阅) 在访问OS X提供的SMB共享时,Windows无法获取(或设置)FCT。在这种情况下,它会显示和设置文件修改时间,而不是FCT(此处应归咎

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

Unison不理解FCTs的概念,可能是因为它主要是在考虑Unix的情况下构建的(请参阅)

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

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

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

这就引出了一个问题——在OSX中设置文件时间戳的API是什么

我希望构建一个控制台应用程序,我的Python脚本可以通过STDIN和STDOUT与之通信。基本上,我在寻找和的OSX等价物


我在C语言中可以做的一些事情会很棒,因为我没有在Objective C中开发的经验。

更改文件属性的方法是使用
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);
}
您可以在基础命令行实用程序中使用上面的代码。

如果您更喜欢纯C,可以使用POSIX stat:

您是否知道一种简单的C方法来设置文件创建时间?我看到在BSD上使用两个UTIMESSUTE()调用是可能的,但是不谈论它。我用这个答案来收集一个小的CMDLY实用工具。@ PuneetArora有一个使用核心基础函数<代码> CFURLSetResourcePropertyForKey < /C>的简单C解决方案。