2

PC (Win7、NTFS) と Mac (OS X、HFS+) の間でファイルを (双方向で) 同期したいと考えています。多くの既存のツール/メソッド (Unison、SyncToy、または Samba 共有で動作するその他のソフトウェア) を使用してみましたが、それらのいずれも、ファイルの作成タイムスタンプ (したがって、FCT と呼ばれます) を保存できません。これは私には受け入れられません。

Unison は FCT の概念を理解していません。これはおそらく、主に Unix を念頭に置いて構築されているためです (私の Unison フォーラムの投稿を参照してください) 。

Windows は、OS X が提供する SMB 共有にアクセスするときに FCT を取得 (または設定) できません。そのようなシナリオでは、FCT の代わりにファイルの変更時間を表示および設定します (ただし、Windows ではなく Samba が非難されます)。したがって、 SyncToyのようなものです。使用できません。

一方、OS X は、Windows が提供する SMB 共有を操作するときに FCT を取得および設定できます。cpファイルのコピーに使用して、ローカル ファイルと SMB 共有の間でファイル同期を行う、OS X 上で実行される Python プログラムを作成できると思ったので、これは良い発見でした。このオプションでは FCT が保存されないことがわかったので、これもダメであることが判明しましたcp -p。FCT が保持されるのは、Finder GUI を介してファイルをコピーしている間だけです。

そこで、ファイル同期ユーティリティを自分で作成することにしました。おそらく Python を使用して、そのインスタンスが PC と Mac でそれぞれ実行され、ssh 経由で通信します。Python 自体には、FCT を取得または設定するための信頼できる方法がないため、Python がこの目的で対話する各プラットフォーム用のネイティブ ヘルパー アプリケーションを構築することにしました。(それか、CでPythonモジュールを書くかのどちらかですが、それはもっと複雑になると思います)

それは私に質問をもたらします-OS Xでファイルのタイムスタンプを設定するAPIは何ですか?

私のPythonスクリプトがSTDINとSTDOUTを介して通信できるコンソールアプリケーションを構築しようとしています。GetFileTime基本的に私はOS Xの同等のものを探していますSetFileTime

Objective C で開発した経験がないので、C でできることは素晴らしいことです。

4

1 に答える 1

3

ファイル属性を変更する 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

于 2013-04-30T14:42:13.590 に答える