您的位置:首页 > 移动开发 > IOS开发

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

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

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

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


打印展示结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: