7

特にファイルの変更日時を取得するために使用できることは知っていattributesOfItemAtPathますが、ファイルの変更日時を設定する方法はありますか?

プログラムでファイルの変更時間を設定する方法を見てきましたか? しかし当てはまらないようです。

私が尋ねる理由は、http://allseeing-i.com/ASIHTTPRequest/ (以下のように) を使用してファイルをフェッチするためです...ただし、タイムスタンプはサーバーの最終更新時刻と同じには保持されません。Last-Modified ヘッダーを使用してダウンロードしたファイルの日付/時刻を設定し、システムでのダウンロード時刻をサーバーと同じに保つことができるようにします。

私のコードは次のとおりです。

ASIHTTPRequest *requestFeed = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:kGZipSQLURL]];
[requestFeed setNumberOfTimesToRetryOnTimeout:2];
[requestFeed setDownloadDestinationPath:librarySQLGZipPath];
[requestFeed setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];
[requestFeed setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
[requestFeed setSecondsToCache:60*60*24*30];
[requestFeed setDownloadCache:[ASIDownloadCache sharedCache]];
[requestFeed startSynchronous];
NSString *lastModified = [[requestFeed responseHeaders] objectForKey:@"Last-Modified"];
NSLog(@"Last Modified: %@",lastModified);

したがって、文字列lastModifiedには時刻/日付のスタンプが保持されます。librarySQLGZipPathのファイルが の日付/時刻に設定されるようにする方法はありますlastModifiedか? 現在の方法を使用すると、ファイルlibrarySQLGZipPathはダウンロードされた時間を保持しますが、これは私には無効です。

ありがとう!

ヤン

後で編集:

このページにこのコードの実行方法をうまく載せたいと思っていたので、回答に対してSteven Kramerのクレジットを与えたかったので、コードを使用して得た回答で質問を編集します。

一方、Last-Modified ヘッダー文字列を NSDate オブジェクトに変更NSDateFromRFC1123するルーチンはhttp://blog.mro.name/2009/08/nsdateformatter-http-header/ (一部調整あり) にあります。

NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:[self NSDateFromRFC1123:lastModified]  ,NSFileModificationDate, nil];
NSError *errorFile;
if ([NSFileManager defaultManager] setAttributes:attrs ofItemAtPath:librarySQLGZipPath error: &errorFile])
{
NSLog(@"Set timestamp of file");
}
else {
NSLog(@"COULD NOT set timestamp of file");
}

どうもありがとうスティーブン!

4

1 に答える 1

9

使用する-[NSFileManager setAttributes:(NSDictionary *)attributes ofItemAtPath:(NSString *)path error:(NSError **)error

于 2011-05-09T15:24:55.740 に答える