iPhoneで、アプリがローカルに保存したファイルの

タイムスタンプを取得するコードを教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2010/01/08 15:54:07
  • 終了:2010/01/13 22:48:27

ベストアンサー

id:cockscomb No.2

cockscomb回答回数23ベストアンサー獲得回数52010/01/13 18:45:42

ポイント35pt

ちょっと忙しくて再回答が遅れました。

申し訳ありません。

それと「&@」ではなくて「%@」ですね。

併せてお詫び致します。

さて、 -attributesOfItemAtPath:error のメソッドで返る NSDictionary を NSLog で出力したところ、 NSFileCreationDate のキーがありませんでした。

ドキュメントには書いてありますが、実際には存在しないために null が出力されているようです。

なぜこのようになるのかは分かりませんが、ざっと検索してみるとiPhoneではこうなっているようです。

http://stackoverflow.com/questions/1140696/cant-get-filecreation...

代替方法としては、 NSFileCreationDate の代わりに NSFileModificationDate のキーを使うことです。

ファイルを作成した日時ではなく、ファイルを最後に編集した日時を得ることになりますが、ローカルに保存したファイルのタイムスタンプを得るだけであれば特に問題はないと思われます。

id:yellowberry

NSFileModificationDateで取得できました。

年のためですが、参照のみではタイムスタンプも

変更されないようなので、完璧です!

ありがとうございました。

2010/01/13 22:48:08

その他の回答(1件)

id:cockscomb No.1

cockscomb回答回数23ベストアンサー獲得回数52010/01/10 09:16:45

ポイント35pt
NSString *filePath = @"path for the file";
NSError *error = nil;
NSDate *fileCreationDate;

NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:&error];
if (error != nil) {
    NSLog(@"Error : %@", [error localizedDescription]);
} else {
    fileCreationDate = [attributes objectForKey:NSFileCreationDate];
    NSLog(@"File creation date : &@", fileCreationDate);
}

http://developer.apple.com/iphone/library/documentation/Cocoa/Re...

テストしていないので細かな間違いなどあればすみません。

保存したファイルへのパスさえ分かっていれば、おおよそこのようなコードで得られるのではないかと思います。

もしファイルを保存したディレクトリまでは分かっていて、ファイルへのパスが分からないのであれば、 NSFileManager の -contentsOfDirectoryAtPath:error: メソッドを使うことになるでしょう。

id:yellowberry

ご回答ありがとうございます。

以下のようなコードで、ファイル書き込みに

成功したときにそのfilePathでNSLogしても

nullになってしまうようです。

できれば試していただけるとうれしいです(^^;

NSLog(@"%@", filePath);

if ([data writeToFile:filePath atomically:YES]) {

NSError *error = nil;

NSDate *fileCreationDate;

NSFileManager *fileManager = [NSFileManager defaultManager];

NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:&error];

if (error != nil) {

NSLog(@"Error : %@", [error localizedDescription]);

} else {

fileCreationDate = [attributes objectForKey:NSFileCreationDate];

// NSLog(@"File creation date : &@", fileCreationDate); // &@ ではなく %@ ?

NSLog(@"File creation date : %@", fileCreationDate);

}

}

2010/01/11 15:04:55
id:cockscomb No.2

cockscomb回答回数23ベストアンサー獲得回数52010/01/13 18:45:42ここでベストアンサー

ポイント35pt

ちょっと忙しくて再回答が遅れました。

申し訳ありません。

それと「&@」ではなくて「%@」ですね。

併せてお詫び致します。

さて、 -attributesOfItemAtPath:error のメソッドで返る NSDictionary を NSLog で出力したところ、 NSFileCreationDate のキーがありませんでした。

ドキュメントには書いてありますが、実際には存在しないために null が出力されているようです。

なぜこのようになるのかは分かりませんが、ざっと検索してみるとiPhoneではこうなっているようです。

http://stackoverflow.com/questions/1140696/cant-get-filecreation...

代替方法としては、 NSFileCreationDate の代わりに NSFileModificationDate のキーを使うことです。

ファイルを作成した日時ではなく、ファイルを最後に編集した日時を得ることになりますが、ローカルに保存したファイルのタイムスタンプを得るだけであれば特に問題はないと思われます。

id:yellowberry

NSFileModificationDateで取得できました。

年のためですが、参照のみではタイムスタンプも

変更されないようなので、完璧です!

ありがとうございました。

2010/01/13 22:48:08
  • id:yellowberry
    cockscomb さん
    回答者制限を2件までに変更しました。
    再回答いただけますとうれしいです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません