NSFileManagerでファイルの属性を取得する

前回の記事でもちょっと書いたけど、NSFileManagerを使うと、ファイルの属性をNSDictionary形式で取得できる。

iOS Reference Library - NSFileManager Class Reference

ファイルシステムの情報を取得する「attributesOfFileSystemForPath:error:」とファイルやディレクトリの情報を取得する「attributesOfItemAtPath:error:」の2つがあるけど、具体的な内容が分かりづらかったのでまとめ。

attributesOfFileSystemForPath:error:の戻り値

説明 取得例
ファイルシステムの空きノード数 NSFileSystemFreeNodes 45625207
ファイルシステムの空きサイズ(bytes) NSFileSystemFreeSize 186880847872
ファイルシステム全体のノード数 NSFileSystemNodes 60965666
ファイルシステムの管理番号 NSFileSystemNumber 234881026
ファイルシステム全体のサイズ(bytes) NSFileSystemSize 249715376128

attributesOfItemAtPath:error:の戻り値

説明 取得例
作成日時 NSFileCreationDate "2010-12-30 07:56:22 +0000"
拡張子を隠しているか NSFileExtensionHidden 0
所有者のグループID NSFileGroupOwnerAccountID 20
所有者のグループ名 NSFileGroupOwnerAccountName staff
変更日時 NSFileModificationDate "2010-12-30 07:56:22 +0000"
所有者のID NSFileOwnerAccountID 501
所有者の名前 NSFileOwnerAccountName User Name
ファイルのアクセス権 NSFilePosixPermissions 493
参照されている数 NSFileReferenceCount 2
ファイルサイズ(bytes) NSFileSize 68
ファイルシステム上のファイル管理番号 NSFileSystemFileNumber 3245958
ファイルシステムの管理番号 NSFileSystemNumber 234881026
ファイルタイプ NSFileType NSFileTypeDirectory

サンプルソースコード

ファイルタイプがNSFileTypeRegularだったら、テキストビューに内容を表示してます。

- (void)loadView {
	[super loadView];
	
	textView = [[UITextView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
	
	/* ファイルの存在確認 */
	if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
		
		/* ファイルタイプの取得 */
		NSDictionary *dict = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:NULL];
		NSString *fileType = [dict objectForKey:NSFileType];

		/* NSFileTypeはNSString型なので、isEqualToStringで比較する */
		if ([fileType isEqualToString:NSFileTypeRegular]) {
			// ファイルをNSASCIIStringEncodingでエンコードしてビューに表示
			NSString *fileCont = [NSString stringWithContentsOfFile:filePath encoding:NSASCIIStringEncoding error:NULL];
			textView.text = fileCont;
		} else {
			textView.text = [NSString stringWithFormat:@"読み込みに失敗しました。\n\nファイル %@ のファイルタイプは %@ です。", filePath, fileType];
		}
	} else {
		textView.text = [NSString stringWithFormat:@"読み込みに失敗しました。\n\nファイル %@ が存在しません", filePath];
	}

	self.view = textView;
}