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. Qt工程pro文件的简单配置(尤其是第三方头文件和库)

    Qt开发中,pro文件是对正工程所有源码.编译.资源.目录等的全方位配置的唯一方式,pro文件的编写非常重要,以下对几个重要项进行说明(win和linux,mac平台通用配置) 注释 以”#”开始的行 ...

  2. bzoj3625

    fft 分治虽然是万能的,但是太慢了 分治是nlog^2n的,太慢了,于是我们用求逆和开根 设f(x)表示答案为x的方案数 c表示物品的生成函数 那么f=f*f*c+1 f*f表示左右儿子的方案数 c ...

  3. mysql:mysql安装及一些配置和图形界面介绍

    关于mysql,我使用的不多,这次记录是在学习一位大牛的demo的契机下完成的.包括前面记录到的sqlserver的一些知识点,也是在新的项目组中协助时候学习记录的.希望通过记录加深印象和帮助后来者. ...

  4. sqlServer:convert()函数

    在oracle中对于时间格式的转换用到的比较多,相对也比较了解,现在换了新的项目组,使用sqlserver数据库,需要对这个数据库的一些常用函数进行重新学习和熟悉,现在根据w3c及网上博文对conve ...

  5. CodeForces 1110G. Tree-Tac-Toe

    题目简述:给定$n$个节点的树,其中一些节点被染成了白色(其余节点未染色).黑白双方博弈,白先动.轮到黑(白)方时,选择树上的一个未染色的节点并将其染成黑(白)色.率先达成三连色(即存在三个节点$a, ...

  6. Flutter实战视频-移动电商-34.列表页_小BUG的修复

    34.列表页_小BUG的修复 当高粱酒的子类没有数据返回的时候就会报错. 解决接口空数据报错的问题 没有数据的时候,给用户一个友好的提示, 我们没有数据的时候还要告诉用户,提示一下他没有数据,在我们的 ...

  7. weiphp的相关部署教程以及新浪云Sae安装技巧

    WeiPHP在Sae上的部署图文教程 进来微信开发挺火的,so 越来越多人开始做起微信开发了,如果从头开发的话挺费时间和精力的,况且市场上已经有一款比较成熟的产品,那就是WeiPHP 不过告诉大家个坏 ...

  8. c# IOCP.ClientEx2.ReadWrite 加断点遭遇System.AccessViolationException 问题

    起因: 如果在Debug模式下,在IOCP.ClientEx2.ReadWrite.cs while (0 > (nPackSize = _ipcp.Pack(arg_n64PackId, ar ...

  9. 51nod1247(gcd)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1247 题意:中文题诶- 思路:(a, b)可以直接到达(a+b ...

  10. apringboot aop权限控制

    + 定义切面: ···@Aspect @Component public class LoginInterceptor { @Around("@annotation(lock)") ...