iOS SDK详解之NSFileManager
来源:互联网 发布:如何销售数据分析 编辑:程序博客网 时间:2024/05/17 16:01
原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
前言:NSFileManager提供了一种方便的方式进行文件操作,包括文件和目录的创建,拷贝,剪切,删除等。
本文会详细讲解如何进行这些最基本的操作。
要注意的几点
- 使用defaultManager的时候,实际上获取的是一个单例(同一个对象),是线程安全的,绝大多数时候,使用这个就可以了。本文讲解基础操作的时候,就使用这个。
- 如果在不同线程中使用,而且需要代理函数来监听事件,这时候要使用init来创建每个线程独立的fileManager
定位
说白了,就是获取一些目录。主要就是两个函数
只是定位
- URLsForDirectory:inDomains:
举例
获取library目录(默认存在)
NSFileManager * fileManager = [NSFileManager defaultManager]; NSArray * searchResult = [fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]; NSURL * documentPath = [searchResult firstObject]; NSLog(@"%@",documentPath);
定位的时候可以创建
- URLForDirectory:inDomain:appropriateForURL:create:error:
获取Application Support(默认不存在)
NSFileManager * fileManager = [NSFileManager defaultManager]; NSURL * path = [fileManager URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; NSLog(@"%@",path);
这里要提到的几个常用参数
- NSLibraryDirectory - Library目录
- NSApplicationSupportDirectory - Library/Application Support目录
- NSDocumentDirectory - Document 目录
- NSUserDomainMask - 用户域
至于,哪个域存储什么东西,参见我之前写的关于沙盒的文章
http://blog.csdn.net/hello_hwc/article/details/44916909
判断文件/目录是否存在
两个函数
第二个函数还有一个额外输出,如果这个文件存在的话,会给出这个文件是不是目录文件
- fileExistsAtPath:- fileExistsAtPath:isDirectory:
NSFileManager * fileManager = [NSFileManager defaultManager]; NSArray * searchResult = [fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]; NSURL * documentPath = [searchResult firstObject]; NSString * newPath = [documentPath.path stringByAppendingPathComponent:@"Demo/Wenchen"]; if ([fileManager fileExistsAtPath:newPath] == false) { NSLog(@"Path not exist"); } BOOL isDic; if ([fileManager fileExistsAtPath:documentPath.path isDirectory:&isDic] == false) { NSLog(@"Path not exist"); } NSLog(@"%d",isDic);
创建
创建目录
两个函数参数类似,只不过第一个参数的类型不同
-createDirectoryAtURL:withIntermediateDirectories:attributes:error:- createDirectoryAtPath:withIntermediateDirectories:attributes:error:
返回Bool来反映操作是否成功,如果出错,错误信息在error里
第二个参数代表是否自动创建不存在父目录(也就是一次创建多层目录)
第三个参数用来设置访问权限,通常为nil
举例
NSFileManager * fileManager = [NSFileManager defaultManager]; NSArray * searchResult = [fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]; NSURL * documentPath = [searchResult firstObject]; NSString * newPath = [documentPath.path stringByAppendingPathComponent:@"Demo/Wenchen"]; if ([fileManager fileExistsAtPath:newPath] == false) { [fileManager createDirectoryAtPath:newPath withIntermediateDirectories:YES attributes:nil error:nil]; }
然后,打开沙盒,看到了创建成功
创建文件
使用函数
这里的attributes除非想要设定一些读写权限,否则nil
- createFileAtPath:contents:attributes:
- 返回Bool来反映操作是否成功,如果出错,错误信息在error里
这个文件后面要用的
NSFileManager * fileManager = [NSFileManager defaultManager]; NSArray * searchResult = [fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]; NSURL * documentPath = [searchResult firstObject]; NSString * newPath = [documentPath.path stringByAppendingPathComponent:@"Demo/Wenchen"]; if ([fileManager fileExistsAtPath:newPath] == false) { [fileManager createDirectoryAtPath:newPath withIntermediateDirectories:YES attributes:nil error:nil]; } NSString * filePath = [newPath stringByAppendingPathComponent:@"file.txt"]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:@"blog.csdn.net/hello_hwc"]; [fileManager createFileAtPath:filePath contents:data attributes:nil];
查看沙盒,确认创建成功
注意,使用一些诸如writeToFile的时候,如果文件不存在,是会自动创建的。
拷贝/移动 文件
使用函数
- copyItemAtURL:toURL:error:- copyItemAtPath:toPath:error:- moveItemAtURL:toURL:error:- moveItemAtPath:toPath:error:
- 返回Bool来反映操作是否成功,如果出错,错误信息在error里
举例
NSFileManager * fileManager = [NSFileManager defaultManager]; NSURL * libraryPath = [[fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]firstObject]; NSURL * documentPath = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]firstObject]; NSString * oldPath = [libraryPath.path stringByAppendingPathComponent:@"Demo/Wenchen/file.txt"]; NSString * newPath = [documentPath.path stringByAppendingPathComponent:@"file.txt"]; [fileManager copyItemAtPath:oldPath toPath:newPath error:nil];
查看沙盒,拷贝成功
删除
NSFileManager * fileManager = [NSFileManager defaultManager]; NSURL * documentPath = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]firstObject]; NSString * newPath = [documentPath.path stringByAppendingPathComponent:@"file.txt"]; Bool success = [fileManager removeItemAtPath:newPath error:nil];
欢迎关注我的iOS SDK详解专栏
http://blog.csdn.net/column/manage.html?alias=huangwenchen-ios-sdk
4 0
- iOS SDK详解之NSFileManager
- iOS SDK详解之NSFileManager
- iOS疯狂详解之NSFileManager使用
- ios NSFileManager 用法详解
- ios NSFileManager 用法详解
- ios NSFileManager 用法详解
- iOS 开发之NSFileManager
- IOS 开发 之 NSFileManager
- iOS NSFileManager 文件操作详解
- IOS SDK详解之NSDictionary
- IOS SDK详解之KVC
- IOS SDK详解之KVO
- IOS SDK详解之NSDictionary
- IOS SDK详解之KVC
- iOS SDK详解之UIScreen
- iOS SDK详解之UIToolBar
- iOS SDK详解之Runloop
- IOS SDK详解之NSDictionary
- 开发者总结的WatchKit App提交技巧
- 使用shape.xml配置控件的形状等显示效果
- 序列化 NSKeyedArchiver,NSPropertyListSerialization
- AGS Server 10.1 切图工具
- java 静态块、非静态块、静态函数、构造函数 执行顺序
- iOS SDK详解之NSFileManager
- CSS的四种引入方式 import与link的具体区别
- Scala 的面向对象编程实践(三)
- Jboss调优
- php 如何删除文件里面的bom
- spring下连接池比较
- 关于慕课网学习c语言的感想(3)
- 图吧地图坐标转GCJ-02(火星)坐标方法
- Hibernate query.list()查询发生java.lang.StringIndexOutOfBoundsException: String index out of range: 0错误