文件管理 - 2
2016-04-26 15:56
489 查看
前面讲到iOS的基本文件管理,这里做些技巧和优化的补充。
前面的创建文件并没有判断文件存不存在,这里增加一个判断文件是否存在的方法:
- (BOOL)createFolder:(NSString *)path{
BOOL isDir = NO;
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL existed = [fileManager fileExistsAtPath:path isDirectory:&isDir];
BOOL isCreated = NO;
if (!(isDir == YES && existed == YES)){
isCreated = [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
}else{
isCreated = YES;
}
return isCreated;
}
补充说明,isDir初始值赋为NO,当文件存在并且系统判断为是文件类型就会被置为YES
增加了判断文件是否存在之后,我们知道document下的文件都会被iCould备份的,如果我们不希望被iCould备份,该怎么办?
参考:http://www.cnblogs.com/macroxu-1982/p/3468030.html
代码引用至CodingNet:https://coding.net/
- (BOOL)createFolder:(NSString *)path{
BOOL isDir = NO;
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL existed = [fileManager fileExistsAtPath:path isDirectory:&isDir];
BOOL isCreated = NO;
if (!(isDir == YES && existed == YES)){
isCreated = [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
}else{
isCreated = YES;
}
if (isCreated) {
[NSURL addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:path isDirectory:YES]];
}
return isCreated;
}
宏:
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
处理iCould备份设置:
@implementation NSURL (Common)
+(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
if ([[NSFileManager defaultManager] fileExistsAtPath: [URL path]])
{
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"5.1")) {
NSError *error = nil;
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error];
if(error){
DebugLog(@"addSkipBackupAttributeToItemAtURL: %@, error: %@", [URL lastPathComponent], error);
}
return success;
}
if (SYSTEM_VERSION_GREATER_THAN(@"5.0")) {
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
}
return NO;
}
@end
前面的创建文件并没有判断文件存不存在,这里增加一个判断文件是否存在的方法:
- (BOOL)createFolder:(NSString *)path{
BOOL isDir = NO;
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL existed = [fileManager fileExistsAtPath:path isDirectory:&isDir];
BOOL isCreated = NO;
if (!(isDir == YES && existed == YES)){
isCreated = [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
}else{
isCreated = YES;
}
return isCreated;
}
补充说明,isDir初始值赋为NO,当文件存在并且系统判断为是文件类型就会被置为YES
增加了判断文件是否存在之后,我们知道document下的文件都会被iCould备份的,如果我们不希望被iCould备份,该怎么办?
参考:http://www.cnblogs.com/macroxu-1982/p/3468030.html
代码引用至CodingNet:https://coding.net/
- (BOOL)createFolder:(NSString *)path{
BOOL isDir = NO;
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL existed = [fileManager fileExistsAtPath:path isDirectory:&isDir];
BOOL isCreated = NO;
if (!(isDir == YES && existed == YES)){
isCreated = [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
}else{
isCreated = YES;
}
if (isCreated) {
[NSURL addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:path isDirectory:YES]];
}
return isCreated;
}
宏:
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
处理iCould备份设置:
@implementation NSURL (Common)
+(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
if ([[NSFileManager defaultManager] fileExistsAtPath: [URL path]])
{
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"5.1")) {
NSError *error = nil;
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error];
if(error){
DebugLog(@"addSkipBackupAttributeToItemAtURL: %@, error: %@", [URL lastPathComponent], error);
}
return success;
}
if (SYSTEM_VERSION_GREATER_THAN(@"5.0")) {
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
}
return NO;
}
@end
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事
- IOS 改变键盘颜色代码