iOS NSFileManger项目实践简整理

作者: NN_逝去 | 来源:发表于2016-05-26 16:57 被阅读372次

前段时间,业务需求中需要频繁涉及对文件的读写操作。因对API不熟,在此有必要简单的整理一下,算是对自己成长的一个记录。

谈谈沙盒目录,耳朵起老茧的东西(看看目录结构吧)
    我以真机为例,看一下他的目录结构
首先,打开Xcode, 选择菜单栏上的Window--->Devices--->选择自己的手机,接着你会看到你手机装载的应用列表,选择其中的一个,在点选“设置”图标


这是桌面上会生成一个

点击右键显示包内容

目录结构
    默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。
    我们可以将应用程序的数据文件保存在该目录下。不过这些数据类型仅限于不可再生的数据,可再生的数据文件应该存放在Library/Cache目录下。
    Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
    tmp:提供一个即时创建临时文件的地方。
 Documents目录 
   NSString *documentsPath  =  [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; 
 Caches目录
   NSString *cachesPath  =  [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; 
 Library目录
   NSString *libraryPath  =  [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject]; 
 tmp目录
   NSString *tempPath = NSTemporaryDirectory();

NSFileManager 常用方法

+ (NSFileManager *)defaultManager;
// 获取目录
- (NSArray<NSURL *> *)URLsForDirectory:(NSSearchPathDirectory)directory inDomains:(NSSearchPathDomainMask)domainMask; (等同于FOUNDATION_EXPORT NSArray<NSString *> *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);)
// 创建文件目录
- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(nullable NSDictionary<NSString *, id> *)attributes error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
// 拷贝文件(to不能是已存在的)
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
// 重命名或移动一个文件(to不能是已存在的)
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
// 移除文件操作
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
// 文件是否存在
- (BOOL)fileExistsAtPath:(NSString *)path;
// 文件写入操作
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

// 1. 常用此方法遍历文件夹文件及删除操作
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSDirectoryEnumerator *myDirectoryEnumerator;
    myDirectoryEnumerator = [fileManager enumeratorAtPath:path];
    
    for (NSString *cachepath in myDirectoryEnumerator) {
        NSString *fileName = [path stringByAppendingPathComponent:cachepath];
        if ([fileManager fileExistsAtPath:fileName]) {
            [fileManager removeItemAtPath:fileName error:nil];
        }
    }

// 2. 获取文件创建时间(了解更多文件属性,可点击查看参考文档第三个链接)
  NSFileManager *fileManager = [NSFileManager defaultManager];
    NSDirectoryEnumerator *directoryEnumerator = [fileManager enumeratorAtPath:filePath];
    while ((path = [directoryEnumerator nextObject]) != nil) {
        NSString *subFilePath = [filePath stringByAppendingPathComponent:path];
        
        //遍历文件属性
        NSError *error = nil;
        NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:subFilePath error:&error];
        if (fileAttributes != nil) {
            NSDate *fileCreateDate = [fileAttributes objectForKey:NSFileCreationDate];
            if (fileCreateDate) {
                NSDate *date2 = [NSDate date];
                NSTimeInterval aTimer = [date2 timeIntervalSinceDate:fileCreateDate];
                
                // 如果文件创建时间间隔大于3天,则删除
                if (aTimer > 3*24*60*60) {
                    if([fileManager fileExistsAtPath:subFilePath]) { //如果存在
                        [fileManager removeItemAtPath:subFilePath error:nil];
                    }
                }
            }
        }
    }

参考文档

相关文章

网友评论

    本文标题:iOS NSFileManger项目实践简整理

    本文链接:https://www.haomeiwen.com/subject/wibphttx.html