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. ubuntu16.04 ROS安转及RVIZ启动

    1.软件中心配置 首先打开软件和更新对话框,打开后按照下图进行配置(确保你的"restricted", "universe," 和 "multiver ...

  2. 安装tensorflow-gpu出现的问题

    1.Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/l ...

  3. .Net框架中的CLR,CTS,ClS的解释

    CLR的全称(Common Language Runtime) 公共语言运行时 可以把它理解为包含运行.Net程序的引擎 和 一堆符合公用语言基础(CLI)的类库的集合,他是一个规范的实现,我们开发的 ...

  4. B. One Bomb (#363 Div.2)

    B. One Bomb time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  5. Asset Catalog Help (十)---Specifying a Resizable Area of an Image

    Specifying a Resizable Area of an Image Use the Xcode Slicing feature to specify the dimensions of a ...

  6. 08.IdentityServer4登录中心

    08.IdentityServer4登录中心 IdentityServer就是一套Framework,实现了OAuth的授权 理解OAuth流程,学会怎么使用他 http://ruanyifeng.c ...

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

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

  8. STL树

    前几天觉得STL中没有树和图真是一种莫大的遗憾啊,但是在网上搜了搜,发现其实可以用容器很简单的构造树. 还是废话少说上代码: struct TreeNode{ DataType data; // Da ...

  9. 细说CSS中的display属性

    相信大部分奋战在前端的,尤其在前端攻城的过程中,有一种越陷越深的感觉,不错,一如前端深似海,从此妹子是浮云啊,前端上手容易,深入难啊!下面我就CSS中的display属性讲下我自己所积累的,与大家共享 ...

  10. ANGULAR 使用 ng build --prod 编译报内存错误的解决办法

    如果你遇到如下的情况 <--- Last few GCs ---> [13724:0000020D39C660D0] 231298 ms: Mark-sweep 1356.3 (1433. ...