iOS で ファイルの mtime を設定したい事態が発生した。 utimes(2) を利用してもよいのだけど、なるべく Cocoa の領域でコードは書いておきたい。

書き込む前に取得。取得したいファイルパスはわかっているとします。

NSString* path = @"hoge.txt";
NSFileManager* filemngr = [NSFileManager defaultManager];

NSDictionary* attributes = [filemngr attributesOfItemAtPath:path error:nil];

if (attributes) {
    NSDate *date = [attributes fileModificationDate]
}

NSFileManager-attributesOfItemAtPath:error で 辞書型でファイルの情報を取得できます。 NSDictionary-fileModificationDate は NSFileManager.h で拡張されたメソッドです。これを使えば取得できます。

書き込みする際は拡張メソッドはないですが、取得した辞書型に値を設定してに書き込みすればできました。

NSString* path = @"hoge.txt";
NSFileManager* filemngr = [NSFileManager defaultManager];

NSDictionary* attributes = [filemngr attributesOfItemAtPath:path error:nil];

if (attributes) {
    NSMutableDictionary* mattributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
    NSDate *date = [NSDate new];
    [mattributes setObject:mtime forKey:NSFileModificationDate];
    [fileManager setAttributes:mattributes ofItemAtPath:path error:nil];
}

NSFileManager-setAttributes:mattributes ofItemAtPath:error: に作成した attributes を使うだけでした。

参考文献