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

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

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

 

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

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

iOS开发网络篇—文件的上传

说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: YYViewController.m 1 #import "YYViewController.h" 2 3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] 4 5 @interface YYViewCont

为View添加阴影效果的工具类:ShadowViewHelper

                                        其实这两张图是相同的界面,区别在于右边的弹窗添加了阴影效果,而左边的没有,这就导致了同一个界面出现了截然不同视觉效果,这就是ShadowViewHelper的功劳了,它是一个给View添加阴影效果的工具类,下面说一下它的使用方法. 1.在module对应得build.gradle加上 compile 'com.github.wangjiegulu:ShadowViewHelper:1.0.1' 2.在代码中个使用 S

Android开发中超好用的正则表达式工具类RegexUtil完整实例

本文实例讲述了Android开发中超好用的正则表达式工具类RegexUtil.分享给大家供大家参考,具体如下: /*********************************************** * 正则表达式工具 * * @author chen.lin * @version 1.0 ************************************************/ public class RegexUtil { /** * 车牌号码Pattern */ pub

iOS开发中将资源文件本地化

资源文件包括:图片文件.音频文件以及前文提到的Localizable.strings等文件,它们的特点是都是随着应用一起打包发布.但就本地化而言无论是图片文件还是音频文件都必须实现的步骤都是类似的,因此我们重点介绍图片文件的本地化. 资源文件的本地化,也是需要准备好几个本地化版本的文件.图片需要本地化,就是要创建几个版本的本地化文件.例如,我们要实现一个游戏的控制画面,画面中有控制关闭或者打开背景音乐的按钮和音效按钮,它们是图片按钮,上面的文字是图片上的文字,因此需要图片的本地化的. 开发中将资

ios开发-textview换行自动添加“1.”或“2.”这是怎么做到的?

问题描述 textview换行自动添加"1."或"2."这是怎么做到的? 例如1.吃饭 2.喝水 前面自动添加1.,2. 我是小白,恳请诸位赐教! 解决方案 根据回车讲字符串分为若干个部分. 按顺序对每个部分加上序号 如果需要的话,合并字符串 显示 解决方案二: adapter里有一个getView(final int position, View convertView, ViewGroup parent)方法 textView.setText(i+"你

iOS开发中使用cocos2d添加触摸事件的方法_IOS

CCLayer类是用来接收触摸输入的.不过你要首先启用这个功能才可以使用它.你通过设置isTouchEnabled为YES来让层接收触摸事件: 复制代码 代码如下: self.isTouchEnabled = YES; 此项设定最好在init方法中设置.你可以在任何时间将其设置为NO或者YES. 一旦启用isTouchEnabled属性,许多与接收触摸输入相关的方法将会开始被调用.这些事件包括:当新的触摸开始的时候,当手指在触摸屏上移动的时候,还有在用户手指离开屏幕以后.很少会发生触摸事件被取消

一个用配制文件连接数据库的Java工具类

大家用的时候只需要把配置文件里的内容改掉就可以啦! 配置文件Database.Property内容 jdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver jdbc.url=jdbc:odbc:mydata jdbc.username=system jdbc.password=manager JAVABEAN文件内容 package community.database; import java.io.*; import java.util.*; import jav

iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) &lt;进度值显示优化&gt;

前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文件下载(离线断点续传下载)>,都遗留了一个细节未处理的问题,那就是在离线断点下载的过程中,当应用程序重新启动之后,进度条的进度值默认没有设置为之前已经下载的进度,根据基本公式"当前进度值 = 已经下载的数据长度 ÷ 最终下载完的数据总长度",已经下载的数据长度可以由沙盒中已经下载的那

iOS开发中文件的上传和下载功能的基本实现_IOS

文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: 复制代码 代码如下: YYViewController.m #import "YYViewController.h" #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] @interface YYV