私はiOSアプリケーションを持っています。ドキュメントディレクトリにいくつかのファイルがあります。これらのファイルが編集または置換されたかどうかを確認する必要があります。それを行う適切な方法は何ですか?ファイルのハッシュまたは最後に編集された時間(iOSでこの時間を取得する方法)またはこれを実装するためのより良い方法がありますか?
質問する
387 次
2 に答える
4
このコードを使用して、ファイルの変更日を取得できます。
NSFileManager* fileManager = [NSFileManager defaultManager];
NSDictionary* attributes = [fileManager attributesOfItemAtPath:path error:nil];
if (attributes != nil) {
NSDate *date = (NSDate*)[attributes objectForKey:NSFileModificationDate];
NSLog(@"Last modification date: %@", [date description]);
} else {
NSLog(@"Not found");
}
ここattributesOfItemAtPath:error:
に関数のドキュメントがあり、ここに取得できるファイル プロパティのリストがあります。
于 2013-03-03T18:59:28.120 に答える
1
ファイル全体をハッシュすることは機能しますが、ほとんどの目的では少しやり過ぎです。すぐにアクセスできるいくつかのものを組み合わせます。
- NSFileModificationDate
- NSFileSize
- NSFileCreationDate
- NSFileSystemFileNumber (inode 番号)
NSURL ベースの API (iOS 4.0 以降) を使用している場合は、
- NSURLContentModificationDateKey (変更時間)
- NSURLFileSizeKey
- NSURLCreationDateKey
- NSURLFileAllocatedSizeKey
- NSURLAttributeModificationDateKey (
st_ctime
?)
少なくとも変更時間とファイルサイズを使用します。他のものは、内容が変更されない限り一般的に変更されないものです。いくつかの注意事項があります。
- ユーザーがバックアップから復元すると、NSFileSystemFileNumber (inode 番号) が変更される可能性があります。
- NSURLAttributeModificationDateKey は、属性が変更されると変更されるはずです。そうである場合
st_ctime
(完全には確信が持てません)、ファイルへのすべての変更をキャッチすることがほぼ保証されますが、ファイルの内容への変更を表していない多くの変更もキャッチする可能性があります。そのような変更が外部で発生するかどうかはわかりません (たとえば、iTunes/iCloud バックアップはバックアップ プロセスの一部として属性を設定しますか?)。
于 2013-03-03T19:45:23.067 に答える