前言:实际开发,我们可能会有这样的需求,就是为文件添加自定义的属性,或者是可以将文件的相关信息添加进该文件的属性中,这样可以以备下次读取利用。
那么本文就是要介绍"拓展文件属性的工具类"
github网址也给出了这个工具类的示例源码:
这个工具类的设计学习来源来自老谭博客笔记: 老谭讲解了两种方法为本地文件属性列表添加属性,其中用方法二(通过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-ExpendedAttributesTool11 */12 13 #import14 15 @interface ExpendFileAttributes : NSObject16 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-ExpendedAttributesTool11 */12 13 #import "ExpendFileAttributes.h"14 15 #include16 17 @implementation ExpendFileAttributes18 //为文件增加一个扩展属性19 + (BOOL)extendedStringValueWithPath:(NSString *)path key:(NSString *)key value:(NSString *)stringValue20 {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 *)key32 {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
打印展示结果: