zoukankan      html  css  js  c++  java
  • 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

    打印展示结果:

  • 相关阅读:
    Equal Cut
    【线段树】Interval GCD
    zookeeper错误
    HBase之过滤器
    Hbase之缓存扫描加快读取速度
    Hbase之遍历超时处理
    Hbase之遍历获取数据
    Hbase之使用回调函数进行批处理操作
    Hbase之进行批处理操作
    Hbase之原子性更新数据
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/5201322.html
Copyright © 2011-2022 走看看