我想(双向地)同步PC (Win7,NTFS)和Mac (OS,HFS+)之间的文件。我尝试过使用许多现有的工具/方法(Unison、SyncToy或其他在Samba共享上工作的软件等等)。但是它们都不能在我的文件上保留文件创建时间戳(因此也就是FCT),这是我无法接受的。
Unison不理解FCT的概念,可能是因为它主要是在考虑Unix的情况下构建的(参见我的Unison论坛帖子)
Windows在访问OS提供的SMB共享时不能获得(或设置)FCT,在这种情况下,它会显示和设置文件修改时间来代替FCT (Samba在这里被指责,而不是Windows),因此不能使用像SyncToy这样的东西。
另一方面,OS在使用Windows提供的SMB共享时可以获取和设置FCT。这是一个很好的发现,因为我认为我可以编写一个运行在OS上的Python程序,在本地文件和SMB共享之间执行文件同步,使用cp复制文件。当我发现cp -p选项没有保存FCTs时,这也被证明是不可行的。只有在通过Finder复制文件时才保留FCT。
因此,我决定自己编写一个文件同步实用程序,很可能使用Python,其实例将分别运行在PC和Mac上,并通过ssh进行通信。由于Python本身没有一种获取或设置FCT的可靠方法,因此我决定为Python为此目的与之交谈的每个平台构建一个本机助手应用程序。(或者用C编写Python模块,但我相信这样做会更复杂)
这就引出了一个问题-在OS中设置文件时间戳的API是什么?
我希望构建一个控制台应用程序,我的Python脚本可以与over & STDOUT进行通信。基本上,我在寻找GetFileTime和SetFileTime的OS等价物
我能用C做的事情会很棒,因为我没有开发目标C的经验。
发布于 2013-04-30 14:42:13
更改文件属性的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
https://stackoverflow.com/questions/16296903
复制相似问题