LSCacheFile.h

//
// LSCacheFile.h
// iPhone
//
// Created by xujinzhong on 14-6-5.
// Copyright (c) 2014年 xujinzhong. All rights reserved.
// #import <Foundation/Foundation.h>
#import "LSCommonMacro.h"
@interface LSCacheFile : NSObject //写入文件
+ (BOOL)writeFileName:(NSString *)fileName data:(id)result;
//读出文件
+ (id)readFileName:(NSString *)fileName;
//计算文件大小
+ (NSString *)folderSizeStringAtPath:(NSString *)folderPath;
//格式化size为M,K模式
+(NSString*)sizeStringFromSizeLong:(long long) folderSize;
//以B方式获取目录下的文件大小
+ (long long)folderSizeAtPath:(NSString*)folderPath;
//判断文件是否存在
+ (BOOL)isExistsFile:(NSString *)filepath;
//删除缓存文件
+ (void)deleteCacheFile:(NSString *)filepath; @end

LSCacheFile.m

//
// LSCacheFile.m
// iPhone
//
// Created by xujinzhong on 14-6-5.
// Copyright (c) 2014年 xujinzhong. All rights reserved.
// #import "LSCacheFile.h"
#include "sys/stat.h" #define PATH_AT_LIBDIR(name) [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:name] @implementation LSCacheFile + (NSString *)filePath:(NSString *)fileName{
NSString *floderPath = PATH_AT_LIBDIR(@"Caches/LSCacheFinder");
if(![[NSFileManager defaultManager] fileExistsAtPath:floderPath isDirectory:nil]){
[[NSFileManager defaultManager] createDirectoryAtPath:floderPath withIntermediateDirectories:NO attributes:nil error:nil];
}
return [floderPath stringByAppendingPathComponent:fileName];
} + (BOOL)writeFile:(NSString *)fileName object:(id)object{
if(fileName == nil){ return NO;
}
if(![NSKeyedArchiver archiveRootObject:object toFile:fileName]){ return NO;
}
return YES;
} + (id)readFile:(NSString *)fileName{
if(fileName == nil){
return nil;
}
return [NSKeyedUnarchiver unarchiveObjectWithFile:fileName];
} + (BOOL)writeFileName:(NSString *)fileName data:(id)result{
NSString *pathName = [LSCacheFile filePath:fileName];
if ([LSCacheFile isExistsFile:pathName]) {
[[NSFileManager defaultManager] removeItemAtPath:pathName error:nil];
}
return [LSCacheFile writeFile:pathName object:result];
} + (id)readFileName:(NSString *)fileName{
if (!fileName) {
return nil;
}
if(![LSCacheFile isExistsFile:fileName]){
return nil;
} id object = [LSCacheFile readFile:[LSCacheFile filePath:fileName]];
if (!object) {
return nil;
}
return object;
} + (BOOL)isExistsFile:(NSString *)filepath{
NSFileManager *filemanage = [NSFileManager defaultManager];
return [filemanage fileExistsAtPath:[LSCacheFile filePath:filepath]];
} +(void)deleteCacheFile:(NSString *)filepath
{
BOOL flag = NO;
if([[NSFileManager defaultManager] fileExistsAtPath:filepath isDirectory:&flag])
{
[[NSFileManager defaultManager] removeItemAtPath:filepath error:nil];
}
} //计算文件夹下文件的总大小
+ (NSString *)folderSizeStringAtPath:(NSString *)folderPath
{
long long folderSize = [LSCacheFile folderSizeAtPath:folderPath];
return [self sizeStringFromSizeLong:folderSize];
} +(NSString*)sizeStringFromSizeLong:(long long) folderSize
{
if (folderSize < ) {
return @"0K";
}else if(folderSize/1024.0 < ){
return [NSString stringWithFormat:@"%.2fK",folderSize/1024.0];
}else if(folderSize/1024.0/1024.0 < ){
return [NSString stringWithFormat:@"%.2fM",folderSize/1024.0/1024.0];
}else if(folderSize/1024.0/1024.0/1024.0 < ){
return [NSString stringWithFormat:@"%.2fG",folderSize/1024.0/1024.0/1024.0];
}
return @"";
} + (long long)folderSizeAtPath:(NSString*)folderPath{
NSFileManager* manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:folderPath]) return ;
NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
NSString* fileName;
long long folderSize = ;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
folderSize += [LSCacheFile fileSizeAtPath:fileAbsolutePath];
}
return folderSize;
} + (long long)fileSizeAtPath:(NSString*)filePath{
struct stat st;
if(lstat([filePath cStringUsingEncoding:NSUTF8StringEncoding], &st) == ){
return st.st_size;
}
return ;
} @end

iOS 自定义读写文件的更多相关文章

  1. C++读写文件ofstream,ifstream,fstream)[转]

    在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结: 这里主要是讨论fstream的内容:[ ...

  2. Inno Setup 如何读写文件

    软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件.通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...

  3. iOS的常见文件及程序的启动原理

    一. iOS中常见文件 (一). Xcode6之前 创建项目,默认可以看见一个存放框架的文件夹 info文件以工程文件名开头,如:第一个项目-Info.plist 项目中默认有一个PCH文件 (二). ...

  4. 你好,C++(5)如何输出数据到屏幕、从屏幕输入数据与读写文件?

    2.2  基本输入/输出流 听过HelloWorld.exe的自我介绍之后,大家已经知道了一个C++程序的任务就是描述数据和处理数据.这两大任务的对象都是数据,可现在的问题是,数据不可能无中生有地产生 ...

  5. iOS自定义的UISwitch按钮

    UISwitch开关控件 开关代替了点选框.开关是到目前为止用起来最简单的控件,不过仍然可以作一定程度的定制化. 一.创建 UISwitch* mySwitch = [[ UISwitchalloc] ...

  6. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  7. C++读写文件流的相关介绍

    掌握文本文件读写的方法了解二进制文件的读写方法 C++文件流:fstream // 文件流ifstream  // 输入文件流ofstream  // 输出文件流 //创建一个文本文件并写入信息//同 ...

  8. IOS上传文件开发

    IOS上传文件开发     在移动应用开发  文件形式上传是不可缺少的,近期把IOS这块文件上传文件代码简单的整理一下.假设大家有须要安卓这边的代码,本人也能够分享给大家! QQ群:74432915 ...

  9. .NET MVC4 实训记录之五(访问自定义资源文件)

    .Net平台下工作好几年了,资源文件么,大多数使用的是.resx文件.它是个好东西,很容易上手,工作效率高,性能稳定.使用.resx文件,会在编译期动态生成已文件名命名的静态类,因此它的访问速度当然是 ...

随机推荐

  1. Objective-C 中nil/Nil/NULL/NSNull

    转自:http://nshipster.cn/nil/ 理解"不存在"的概念不仅仅是一个哲学的问题,也是一个实际的问题.我们是有形宇宙的居民,而原因在于逻辑宇宙的存在不确定性.作为 ...

  2. activeMQ:java消息机制初试(一)

    前言:自打学习编程以来,就知道activeMQ这么个东西,但是仅仅限于只知其名,不闻其详.现在加入到新的项目组,项目中使用了这个.现在想重新去学习和了解.最后整合成一个完成的demo,在网上看的Dem ...

  3. 【eclipse插件开发实战】 Eclipse插件开发6——eclipse在线翻译插件Translator开发实例详解

    Eclipse插件开发6--eclipse在线翻译插件Translator开发实例详解 在上一篇文章中讲到了一个简单的eclipse插件开发实例,主要是对插件工程的基本创建步骤进行了讲解,这篇文章当中 ...

  4. JAVA基础--JAVA API常见对象(包装类和正则)12

    一.基本类型包装类 1.基本类型包装类介绍 8种基本类型: byte  short    int    long    float   double   char   boolean 这8种基本类型它 ...

  5. MySql用户配置

    数据库:MySQL5.7 注意事项: MySQL5.7 mysql.user 表没有 password字段 改 authentication_string: 一.前言 我们在创建数据库和权限的时候才用 ...

  6. Swift 数组,字典,结构体,枚举

    1.数组 let types = ["none","warning","error"]//省略类型的数组声明 var menbers = [ ...

  7. CodeForces 586D【BFS】

    题意: s是这个人开始位置:连续相同大写字母是 Each of the k trains,相应的火车具有相应的字母: '.' 代表空: 有个人在最左列,上面有连续字母代表的火车,火车从左边出去的话,会 ...

  8. 51nod 1051【基础】

    思路: 找题4级做做...然后找了题最水的.. = =感动...居然是一下子[记]得了做法... dp一下,枚举列的起点和终点,然后求和这一段,然后对这一大列就是求个最大字段和: #include & ...

  9. unity从模型中抽取动画文件(animation)

    http://www.cnblogs.com/leng-yuye/archive/2013/01/11/2856144.html 由于模型是由第三方的软件制作的,用unity不能直接编辑模型里的动画文 ...

  10. OPENGL_变换与坐标系

    参考:http://blog.csdn.net/kandyer/article/details/12449973 坐标系 世界坐标系:绝对坐标 物体坐标系:以物体自身为原点的坐标系 摄像机坐标系:以摄 ...