iOS开发 -- 为本地文件添加自定义属性的工具类

前言:实际开发,我们可能会有这样的需求,就是为文件添加自定义的属性,或者是可以将文件的相关信息添加进该文件的属性中,这样可以以备下次读取利用。

   那么本文就是要介绍"拓展文件属性的工具类"

 

github网址也给出了这个工具类的示例源码:https://github.com/HeYang123456789/NSURLSession-ExpendedAttributesTool

 

这个工具类的设计学习来源来自老谭博客笔记:http://www.tanhao.me/pieces/1102.html/ 老谭讲解了两种方法为本地文件属性列表添加属性,其中用方法二(通过NSFileManager一个特殊的AttributeName)我发现好像无效了,暂时不明原因,待以后再探究和解决。但是方法一是有效的,代码就无比鸡贼的拷贝展示如下喽:

 

ExpendFileAttributes.h

 1 //
 2 //  ExpendFileAttributes.h
 3 //  NSURLSession实现离线断点续传
 4 //
 5 //  Created by HEYANG on 16/2/19.
 6 //  Copyright © 2016年 HEYANG. All rights reserved.
 7 //
 8 
 9 /**
10  *   ExpendFileAttributes工具类下载源码:https://github.com/HeYang123456789/NSURLSession-ExpendedAttributesTool
11  */
12 
13 #import <Foundation/Foundation.h>
14 
15 @interface ExpendFileAttributes : NSObject
16 
17 /** 为文件增加一个扩展属性,值是字符串 */
18 + (BOOL)extendedStringValueWithPath:(NSString *)path key:(NSString *)key value:(NSString *)value;
19 
20 /** 读取文件扩展属性,值是字符串 */
21 + (NSString *)stringValueWithPath:(NSString *)path key:(NSString *)key;
22 
23 
24 @end

ExpendFileAttributes.m

 1 //
 2 //  ExpendFileAttributes.m
 3 //  NSURLSession实现离线断点续传
 4 //
 5 //  Created by HEYANG on 16/2/19.
 6 //  Copyright © 2016年 HEYANG. All rights reserved.
 7 //
 8 
 9 /**
10  *   ExpendFileAttributes工具类下载源码:https://github.com/HeYang123456789/NSURLSession-ExpendedAttributesTool
11  */
12 
13 #import "ExpendFileAttributes.h"
14 
15 #include <sys/xattr.h>
16 
17 @implementation ExpendFileAttributes
18 //为文件增加一个扩展属性
19 + (BOOL)extendedStringValueWithPath:(NSString *)path key:(NSString *)key value:(NSString *)stringValue
20 {
21     NSData* value = [stringValue dataUsingEncoding:NSUTF8StringEncoding];
22     ssize_t writelen = setxattr([path fileSystemRepresentation],
23                                 [key UTF8String],
24                                 [value bytes],
25                                 [value length],
26                                 0,
27                                 0);
28     return writelen==0?YES:NO;
29 }
30 //读取文件扩展属性
31 + (NSString *)stringValueWithPath:(NSString *)path key:(NSString *)key
32 {
33     ssize_t readlen = 1024;
34     do {
35         char buffer[readlen];
36         bzero(buffer, sizeof(buffer));
37         size_t leng = sizeof(buffer);
38         readlen = getxattr([path fileSystemRepresentation],
39                            [key UTF8String],
40                            buffer,
41                            leng,
42                            0,
43                            0);
44         if (readlen < 0){
45             return nil;
46         }
47         else if (readlen > sizeof(buffer)) {
48             continue;
49         }else{
50             NSData *data = [NSData dataWithBytes:buffer length:readlen];
51             NSString* result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
52             NSLog(@"result---%@",result);
53             return result;
54         }
55     } while (YES);
56     return nil;
57 }
58 @end

打印展示结果:

posted @ 2016-02-19 16:01  何杨  阅读(1827)  评论(0编辑  收藏  举报