2011-08-01 21 views
6

ファイルの作成日と変更日を設定しようとしています。NSFileCreationDateを設定しても効果がありません

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSDate *now = [NSDate date]; 
NSDictionary *timestampAttr = [NSDictionary dictionaryWithObjectsAndKeys: 
             now, NSFileCreationDate, now, NSFileModificationDate, nil]; 
BOOL ret = [fileManager setAttributes:timestampAttr ofItemAtPath:path error:&err]; 

ファイルの変更日が正常に変更されました。作成日は変更されません。どうして?

retがあり、errがnilです。 -attributesOfItemAtPathは、timestampAttrの両方のキーと正しい(変更された)修正日と誤った(変更されていない)作成日を含む辞書を返します。

編集: OS Xバージョン10.6を使用しています。 Xcodeプロジェクトの基本SDKは10.5です。ファイルはコンピュータの唯一のハードドライブ(RAIDなし)、私のホームフォルダ内のフォルダにあります。 ファイルが違いがあれば、そのファイルはアプリバンドルの中にあります。

編集:この単純な例では動作します:

#import <Cocoa/Cocoa.h> 

int main(void) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    NSFileManager *m = [NSFileManager defaultManager]; 
    NSString *path = ...; 
    [m setAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSDate date],NSFileCreationDate,nil] ofItemAtPath:path error:nil]; 
    [pool drain]; 
    return 0; 
} 

は私が(私のデスクトップ上に)簡単な例として、同じファイルの属性を設定し、私はもともとについて尋ねたアプリに上記のコードを貼り付けました。コードがアプリ内にあるときは、機能しません。

編集:これはクレイジーです。上記の単純な例がうまくいきました(私の同僚と私は両方とも自分のコンピューター上で動作しているのを見ました)が、今は動作しません。

答えて

9

もう少し簡単な例を試してみたところ、私が最近修正したファイルでのみ動作していたことに気付きました。

作成日を設定する前に、修正日を設定することで、私が求めていた元のコードだけでなく、簡単な例を得ることができました。

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSDate *now = [NSDate date]; 
NSDictionary *creationDateAttr = [NSDictionary dictionaryWithObjectsAndKeys: now, NSFileCreationDate, nil]; 
NSDictionary *modificationDateAttr = [NSDictionary dictionaryWithObjectsAndKeys: now, NSFileModificationDate, nil]; 
[fileManager setAttributes:modificationDateAttr ofItemAtPath:path error:&err]; 
[fileManager setAttributes:creationDateAttr ofItemAtPath:path error:&err]; 
0

OS Xのどのバージョンですか?ターゲットファイルはどこにありますか?ファイルが存在するボリュームのディスクフォーマットは何ですか?あなたのMacにはどんな種類のセットアップがありますか(万が一ソフトウェアRAIDをお持ちですか?)

Mac OS X 10.7のテストでは、私のデスクトップにファイルがあり、HFS +は正常に機能します(どちらの日付もnowに変更されています)。

新しいNSFileManager APIを使用して過去にいくつかの奇妙な結果が出ました。たとえば、-copyItemAtPath:toPath:error:は、HFS +ボリューム上のファイルをコピーするときにファイルの作成日を保持しません。具体的には、コピーの作成日は1904年の日付に相当するコピーで消去されます。

詳細については、原因を特定するのに役立つ場合があります。

+0

ありがとうございました。私の編集を参照してください。 – jlstrecker