• iOS 自定义读写文件


    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
  • 相关阅读:
    用 Java 爬美女图片,厉害了。。
    Java-Stream流方法学习及总结
    Swagger3 更新配置详解
    一、MySQL下载和安装
    hack(兼容IE及浏览器常用的写法)
    css常用单位
    Ps使用 和精灵图的制作
    HTML5
    JS面向对象
    seajs与requirejs
  • 原文地址:https://www.cnblogs.com/xujinzhong/p/8478658.html
Copyright © 2020-2023  润新知