794092-20160412225334582-792473503.png
文件夹 | 默认子目录 | 作用 | iCloud备份 | 文件清理 |
---|---|---|---|---|
Documents | 存放用户生成的,可以管理的文件。因为它会备份到iCould,如果使用不当,会审核被拒 | 会 | 卸载APP时 | |
Library | Caches | 存放缓存文件。“删除缓存”一般指的就是清除此目录下的文件 | 不会 | 卸载APP时 |
Preferences | NSUserDefault操作的文件就存放这里。用来存储用户的偏好设置,iOS的setting(设置)会在这个目录中查找应用程序的设置信息。避免直接操作此文件夹 | 会 | 卸载APP时 | |
tmp | 临时存放文件 | 不会 | 内存不足时、App不运行时都可能 |
文件操作类
//获取Document路径
+ (NSString *)getDocumentPath
{
NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [filePaths objectAtIndex:0];
}
//获取Library路径
+ (NSString *)getLibraryPath
{
NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
return [filePaths objectAtIndex:0];
}
//获取应用程序路径
+ (NSString *)getApplicationPath
{
return NSHomeDirectory();
}
//获取Cache路径
+ (NSString *)getCachePath
{
NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
return [filePaths objectAtIndex:0];
}
//获取Temp路径
+ (NSString *)getTempPath
{
return NSTemporaryDirectory();
}
//判断文件是否存在于某个路径中
+ (BOOL)fileIsExistOfPath:(NSString *)filePath
{
BOOL flag = NO;
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:filePath]) {
flag = YES;
} else {
flag = NO;
}
return flag;
}
//从某个路径中移除文件
+ (BOOL)removeFileOfPath:(NSString *)filePath
{
BOOL flag = YES;
NSFileManager *fileManage = [NSFileManager defaultManager];
if ([fileManage fileExistsAtPath:filePath]) {
if (![fileManage removeItemAtPath:filePath error:nil]) {
flag = NO;
}
}
return flag;
}
//从URL路径中移除文件
- (BOOL)removeFileOfURL:(NSURL *)fileURL
{
BOOL flag = YES;
NSFileManager *fileManage = [NSFileManager defaultManager];
if ([fileManage fileExistsAtPath:fileURL.path]) {
if (![fileManage removeItemAtURL:fileURL error:nil]) {
flag = NO;
}
}
return flag;
}
//创建文件路径
+(BOOL)creatDirectoryWithPath:(NSString *)dirPath
{
BOOL ret = YES;
BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:dirPath];
if (!isExist) {
NSError *error;
BOOL isSuccess = [[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error];
if (!isSuccess) {
ret = NO;
NSLog(@"creat Directory Failed. errorInfo:%@",error);
}
}
return ret;
}
//创建文件
+ (BOOL)creatFileWithPath:(NSString *)filePath
{
BOOL isSuccess = YES;
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL temp = [fileManager fileExistsAtPath:filePath];
if (temp) {
return YES;
}
NSError *error;
//stringByDeletingLastPathComponent:删除最后一个路径节点
NSString *dirPath = [filePath stringByDeletingLastPathComponent];
isSuccess = [fileManager createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error];
if (error) {
NSLog(@"creat File Failed. errorInfo:%@",error);
}
if (!isSuccess) {
return isSuccess;
}
isSuccess = [fileManager createFileAtPath:filePath contents:nil attributes:nil];
return isSuccess;
}
//保存文件
+ (BOOL)saveFile:(NSString *)filePath withData:(NSData *)data
{
BOOL ret = YES;
ret = [self creatFileWithPath:filePath];
if (ret) {
ret = [data writeToFile:filePath atomically:YES];
if (!ret) {
NSLog(@"%s Failed",__FUNCTION__);
}
} else {
NSLog(@"%s Failed",__FUNCTION__);
}
return ret;
}
//追加写文件
+ (BOOL)appendData:(NSData *)data withPath:(NSString *)path
{
BOOL result = [self creatFileWithPath:path];
if (result) {
NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:path];
[handle seekToEndOfFile];
[handle writeData:data];
[handle synchronizeFile];
[handle closeFile];
return YES;
} else {
NSLog(@"%s Failed",__FUNCTION__);
return NO;
}
}
//获取文件
+ (NSData *)getFileData:(NSString *)filePath
{
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *fileData = [handle readDataToEndOfFile];
[handle closeFile];
return fileData;
}
//读取文件
+ (NSData *)getFileData:(NSString *)filePath startIndex:(long long)startIndex length:(NSInteger)length
{
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
[handle seekToFileOffset:startIndex];
NSData *data = [handle readDataOfLength:length];
[handle closeFile];
return data;
}
//移动文件
+ (BOOL)moveFileFromPath:(NSString *)fromPath toPath:(NSString *)toPath
{
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:fromPath]) {
NSLog(@"Error: fromPath Not Exist");
return NO;
}
if (![fileManager fileExistsAtPath:toPath]) {
NSLog(@"Error: toPath Not Exist");
return NO;
}
NSString *headerComponent = [toPath stringByDeletingLastPathComponent];
if ([self creatFileWithPath:headerComponent]) {
return [fileManager moveItemAtPath:fromPath toPath:toPath error:nil];
} else {
return NO;
}
}
//拷贝文件
+(BOOL)copyFileFromPath:(NSString *)fromPath toPath:(NSString *)toPath
{
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:fromPath]) {
NSLog(@"Error: fromPath Not Exist");
return NO;
}
if (![fileManager fileExistsAtPath:toPath]) {
NSLog(@"Error: toPath Not Exist");
return NO;
}
NSString *headerComponent = [toPath stringByDeletingLastPathComponent];
if ([self creatFileWithPath:headerComponent]) {
return [fileManager copyItemAtPath:fromPath toPath:toPath error:nil];
} else {
return NO;
}
}
//获取文件夹下文件列表
+ (NSArray *)getFileListInFolderWithPath:(NSString *)path
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *fileList = [fileManager contentsOfDirectoryAtPath:path error:&error];
if (error) {
NSLog(@"getFileListInFolderWithPathFailed, errorInfo:%@",error);
}
return fileList;
}
//获取文件大小
+ (long long)getFileSizeWithPath:(NSString *)path
{
unsigned long long fileLength = 0;
NSNumber *fileSize;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];
if ((fileSize = [fileAttributes objectForKey:NSFileSize])) {
fileLength = [fileSize unsignedLongLongValue]; //单位是 B
}
return fileLength / 1000; 换算为K
}
//获取文件创建时间
+ (NSString *)getFileCreatDateWithPath:(NSString *)path
{
NSString *date = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];
date = [fileAttributes objectForKey:NSFileCreationDate];
return date;
}
//获取文件所有者
+ (NSString *)getFileOwnerWithPath:(NSString *)path
{
NSString *fileOwner = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];
fileOwner = [fileAttributes objectForKey:NSFileOwnerAccountName];
return fileOwner;
}
//获取文件更改日期
+ (NSString *)getFileChangeDateWithPath:(NSString *)path
{
NSString *date = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];
date = [fileAttributes objectForKey:NSFileModificationDate];
return date;
}
---------------------
作者:Stevin的技术博客
来源:CSDN
原文:https://blog.csdn.net/feng2qing/article/details/54974200
版权声明:本文为博主原创文章,转载请附上博文链接!!
清理缓存
ClearCacheTool.h文件
#import <Foundation/Foundation.h>
@interface ClearCacheTool : NSObject
/*s*
* 获取path路径下文件夹的大小
*
* @param path 要获取的文件夹 路径
*
* @return 返回path路径下文件夹的大小
*/
+ (NSString *)getCacheSizeWithFilePath:(NSString *)path;
/**
* 清除path路径下文件夹的缓存
*
* @param path 要清除缓存的文件夹 路径
*
* @return 是否清除成功
*/
+ (BOOL)clearCacheWithFilePath:(NSString *)path;
ClearCacheTool.m文件
#import "ClearCacheTool.h"
@implementation ClearCacheTool
#pragma mark - 获取path路径下文件夹大小
+ (NSString *)getCacheSizeWithFilePath:(NSString *)path{
// 获取“path”文件夹下的所有文件
NSArray *subPathArr = [[NSFileManager defaultManager] subpathsAtPath:path];
NSString *filePath = nil;
NSInteger totleSize = 0;
for (NSString *subPath in subPathArr){
// 1. 拼接每一个文件的全路径
filePath =[path stringByAppendingPathComponent:subPath];
// 2. 是否是文件夹,默认不是
BOOL isDirectory = NO;
// 3. 判断文件是否存在
BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDirectory];
// 4. 以上判断目的是忽略不需要计算的文件
if (!isExist || isDirectory || [filePath containsString:@".DS"]){
// 过滤: 1. 文件夹不存在 2. 过滤文件夹 3. 隐藏文件
continue;
}
// 5. 指定路径,获取这个路径的属性
NSDictionary *dict = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
/**
attributesOfItemAtPath: 文件夹路径
该方法只能获取文件的属性, 无法获取文件夹属性, 所以也是需要遍历文件夹的每一个文件的原因
*/
// 6. 获取每一个文件的大小
NSInteger size = [dict[@"NSFileSize"] integerValue];
// 7. 计算总大小
totleSize += size;
}
//8. 将文件夹大小转换为 M/KB/B
NSString *totleStr = nil;
if (totleSize > 1000 * 1000){
totleStr = [NSString stringWithFormat:@"%.2fM",totleSize / 1000.00f /1000.00f];
}else if (totleSize > 1000){
totleStr = [NSString stringWithFormat:@"%.2fKB",totleSize / 1000.00f ];
}else{
totleStr = [NSString stringWithFormat:@"%.2fB",totleSize / 1.00f];
}
return totleStr;
}
#pragma mark - 清除path文件夹下缓存大小
+ (BOOL)clearCacheWithFilePath:(NSString *)path{
//拿到path路径的下一级目录的子文件夹
NSArray *subPathArr = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
NSString *filePath = nil;
NSError *error = nil;
for (NSString *subPath in subPathArr)
{
filePath = [path stringByAppendingPathComponent:subPath];
//删除子文件夹
[[NSFileManager defaultManager] removeItemAtPath:filePath error:&error];
if (error) {
return NO;
}
}
return YES;
}
来自:https://blog.csdn.net/grl18840839630/article/details/79581405
网友评论