前言:实际开发,我们可能会有这样的需求,就是为文件添加自定义的属性,或者是可以将文件的相关信息添加进该文件的属性中,这样可以以备下次读取利用。
那么本文就是要介绍"拓展文件属性的工具类"
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
打印展示结果:
时间: 2025-01-26 14:25:18