当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS 自定义读写文件

iOS 自定义读写文件

2018年02月28日  | 移动技术网IT编程  | 我要评论

ca180,有关海瑞的故事,大庆医学高等专科学校

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 < 1024) {
        return @"0K";
    }else if(folderSize/1024.0 < 1024){
        return [NSString stringWithFormat:@"%.2fK",folderSize/1024.0];
    }else if(folderSize/1024.0/1024.0 < 1024){
        return [NSString stringWithFormat:@"%.2fM",folderSize/1024.0/1024.0];
    }else if(folderSize/1024.0/1024.0/1024.0 < 1024){
        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 0;
    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
    NSString* fileName;
    long long folderSize = 0;
    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) == 0){
        return st.st_size;
    }
    return 0;
}

@end

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网