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

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

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

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

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

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

ExpendFileAttributes.h

//
//  ExpendFileAttributes.h
//  NSURLSession实现离线断点续传
//
//  Created by HEYANG on 16/2/19.
//  Copyright © 2016年 HEYANG. All rights reserved.
//

/**
*   ExpendFileAttributes工具类下载源码:https://github.com/HeYang123456789/NSURLSession-ExpendedAttributesTool
*/

#import <Foundation/Foundation.h>

@interface ExpendFileAttributes : NSObject

/** 为文件增加一个扩展属性,值是字符串 */
+ (BOOL)extendedStringValueWithPath:(NSString *)path key:(NSString *)key value:(NSString *)value;

/** 读取文件扩展属性,值是字符串 */
+ (NSString *)stringValueWithPath:(NSString *)path key:(NSString *)key;

@end


ExpendFileAttributes.m

//
//  ExpendFileAttributes.m
//  NSURLSession实现离线断点续传
//
//  Created by HEYANG on 16/2/19.
//  Copyright © 2016年 HEYANG. All rights reserved.
//

/**
*   ExpendFileAttributes工具类下载源码:https://github.com/HeYang123456789/NSURLSession-ExpendedAttributesTool
*/

#import "ExpendFileAttributes.h"

#include <sys/xattr.h>

@implementation ExpendFileAttributes
//为文件增加一个扩展属性
+ (BOOL)extendedStringValueWithPath:(NSString *)path key:(NSString *)key value:(NSString *)stringValue
{
NSData* value = [stringValue dataUsingEncoding:NSUTF8StringEncoding];
ssize_t writelen = setxattr([path fileSystemRepresentation],
[key UTF8String],
[value bytes],
[value length],
0,
0);
return writelen==0?YES:NO;
}
//读取文件扩展属性
+ (NSString *)stringValueWithPath:(NSString *)path key:(NSString *)key
{
ssize_t readlen = 1024;
do {
char buffer[readlen];
bzero(buffer, sizeof(buffer));
size_t leng = sizeof(buffer);
readlen = getxattr([path fileSystemRepresentation],
[key UTF8String],
buffer,
leng,
0,
0);
if (readlen < 0){
return nil;
}
else if (readlen > sizeof(buffer)) {
continue;
}else{
NSData *data = [NSData dataWithBytes:buffer length:readlen];
NSString* result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"result---%@",result);
return result;
}
} while (YES);
return nil;
}
@end


打印展示结果:

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