iOS - OC NSFileManager 文件管理
前言
@interface NSFileManager : NSObject
@interface NSFileHandle : NSObject <NSSecureCoding>
- NSFileManager 是 Foundation 框架中用来管理和操作文件、目录等文件系统相关联内容的类。
1、路径操作
// 文件管理器对象,单例类对象
NSFileManager *nfManager = [NSFileManager defaultManager];
NSURL *folderUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFolder"]];
NSURL *filerUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFile.txt"]];
NSURL *srcUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFile.txt"]];
NSURL *dstUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFolder/testFile.txt"]];
// 用于保存错误信息
NSError *errorInfo = nil;
// 创建文件夹
/*
-(BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates
attributes:(NSDictionary *)attributes
error:(NSError **)error;
path:文件夹路径
createIntermediates:是否连同上一级路径一起创建,NO 并且上一级文件路径不存在时会创建失败。
attributes:文件夹属性,nil 系统默认属性
error:保存错误原因
BOOL:文件夹创建成功时返回值为 YES
*/
BOOL bl1 = [nfManager createDirectoryAtPath:[folderUrl path] withIntermediateDirectories:YES
attributes:nil
error:&errorInfo];
// 创建文件
/*
-(BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
path:文件路径
data:文件内容,nil 空
attr:文件属性,nil 系统默认属性
BOOL:文件创建成功时返回值为 YES
*/
BOOL bl2 = [nfManager createFileAtPath:[filerUrl path]
contents:[@"北京欢迎您" dataUsingEncoding:NSUTF8StringEncoding]
attributes:nil];
// 拷贝文件
/*
如果 dstUrl 路径文件已存在,该方法会终止拷贝,并返回 false。
如果 srcUrl 的最后一部分是符号链接,那么只有链接会被拷贝到新路径。
*/
BOOL bl3 = [nfManager copyItemAtPath:[srcUrl path] toPath:[dstUrl path] error:nil];
// 删除文件
/*
删除成功或者 url 为 nil 时返回 true,如果发生错误返回 false。如果使用 delegate
终止了删除文件,则返回 true,如果使用 delegate 终止了删除目录,则返回 false
*/
BOOL bl4 = [nfManager removeItemAtPath:[dstUrl path] error:nil];
// 移动文件
/*
如果 dstUrl 路径文件已存在,该方法会终止移动,并返回 false。如果 srcUrl 的最后
一部分是符号链接,那么只有链接会被移动到新路径。链接所指向的内容仍然保持在现有的位置。
*/
BOOL bl5 = [nfManager moveItemAtPath:[srcUrl path] toPath:[dstUrl path] error:nil];
// 查找满足指定条件的路径
// 返回其 URL。该方法不但可以获得标准系统目录,还可以用来创建临时路径
NSURL *url1 = [nfManager URLForDirectory:NSDocumentDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:YES
error:nil];
// 返回所有满足条件的路径列表
NSArray *urlObjs = [nfManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *url2 = urlObjs[0];
// 查询指定路径下的所有子路径
NSArray *urls1 = [nfManager subpathsAtPath:[url1 path]];
NSArray *urls2 = [nfManager subpathsOfDirectoryAtPath:[url1 path] error:nil];
// 浅遍历
// 返回指定目录下的文件、子目录及符号链接的列表
NSArray *contentsDir1 = [nfManager contentsOfDirectoryAtPath:[url1 path] error:nil];
// 返回的是文件全路径
NSArray *contentsDir2 = [nfManager contentsOfDirectoryAtURL:url1
includingPropertiesForKeys:nil
options:NSDirectoryEnumerationSkipsHiddenFiles
error:nil];
// 深遍历
// 返回指定目录下的所有文件及其子目录下的所有元素路径
NSDirectoryEnumerator *enumeratorDir1 = [nfManager enumeratorAtPath:[url1 path]];
// 返回的是文件全路径
NSDirectoryEnumerator *enumeratorDir2 = [nfManager enumeratorAtURL:url1
includingPropertiesForKeys:nil
options:NSDirectoryEnumerationSkipsHiddenFiles
errorHandler:nil];
// 枚举遍历深层遍历
NSDirectoryEnumerator *dEnu = [nfManager enumeratorAtPath:[url1 path]];
id obj = nil;
while (obj = [dEnu nextObject]) {
NSLog(@"%@", obj);
}
// 显示路径的本地化名称
/*
// 如果指定的文件或目录不存在,会返回 path 本身
*/
NSString *displayName = [nfManager displayNameAtPath:[url1 path]];
// 获取指定路径的各种属性
NSDictionary *attributes = [nfManager attributesOfItemAtPath:[url1 path] error:nil];
// 获取指定路径文件的内容数据
/*
如果指定路径为目录或发生错误,返回 nil
*/
NSData *data = [nfManager contentsAtPath:[[url1 path] stringByAppendingString:@"/test.txt"]];
// 获取当前路径
NSString *currentPath = [nfManager currentDirectoryPath];
// 更改当前路径
/*
/Users/JHQ0228/Desktop/Debug
*/
BOOL bl6 = [nfManager changeCurrentDirectoryPath:[NSHomeDirectory() stringByAppendingString:@"/Desktop/Debug"]];
// 获取临时工作路径
/*
获取系统中可以用来创建临时文件的目录路径名,一定要在完成任务之后将在其中创建的文件删除
*/
NSString *tempPath = NSTemporaryDirectory();
// 获取用户主路径(沙盒路径)
NSString *homePath = NSHomeDirectory();
// 获取指定用户的主路径
/*
NSUserName(); 获取当前用户的登录名。NSFullUserName(); 获取当前用户完整用户名
*/
NSString *userHomePath = NSHomeDirectoryForUser(NSUserName());
// 获取用户 Documents 路径
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
// 获取 app 包路径
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
// 创建一个新路径
BOOL bl8 = [nfManager createDirectoryAtPath:[NSHomeDirectory() stringByAppendingString:@"/Desktop/Debug1"]
withIntermediateDirectories:YES
attributes:nil
error:nil];
// 判断文件是否为路径(flag 中存储结果 YES/NO)
// 存储判断结果
BOOL result;
BOOL bl9 = [nfManager fileExistsAtPath:[NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"]
isDirectory:&result];
// 判断是否是根路径(绝对路径)
/*
路径以 “/” 开始的为根路径
*/
BOOL bl10 = [@"../Desktop/test.txt" isAbsolutePath];
// 获取最后一个路径
NSString *lastPath = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] lastPathComponent];
// 删除最后一个路径
NSString *deleteLastPath = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] stringByDeletingLastPathComponent];
// 拼接一个路径
NSString *appendingPath = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] stringByAppendingPathComponent:@"testFolder"];
// 文件路径分割
NSArray *pathArray = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] pathComponents];
// 文件路径组合
NSString *pathString = [NSString pathWithComponents:pathArray];
// 将路径中的代字符 ~ 扩展成用户主目录或指定用户的主目录
// 特殊的代字符 ~ 是用户主目录(如:/Users/JHQ0228)的缩写,~linda 表示用户 linda 主目录的缩写
NSString *path1 = @"~/Desktop/test.txt";
// /Users/JHQ0228/Desktop/test.txt
NSString *mainPath = [path1 stringByExpandingTildeInPath];
// 解析路径中的符号链接
// /.. 上一级目录
NSString *path2 = @"~/../Debug";
// 通过解析 ~(用户主目录)、..(父目录) 、.(当前目录)和符号链接来标准化路径
NSString *appPath1 = [path2 stringByResolvingSymlinksInPath];
// NSHomeDirectory()/.. NSHomeDirectory() 的上一级目录
NSString *path3 = [NSString stringWithFormat:@"%@/../Debug", NSHomeDirectory()];
NSString *appPath2 = [path3 stringByStandardizingPath];
// 获取文件拓展名
NSString *getExtension = [@"/Desktop/test.txt" pathExtension];
// 删除文件拓展名
NSString *deleteExtension = [@"/Desktop/test.txt" stringByDeletingPathExtension];
// 拼接文件拓展名
NSString *appendingExtension = [@"/Desktop/test.txt" stringByAppendingPathExtension:@"doc"];
// 获取文件大小
NSDictionary *dict = [[NSFileManager defaultManager] attributesOfItemAtPath:filerUrl.path error:NULL];
long long fileSize = [dict[NSFileSize] longLongValue];
long long fileSize = [dict fileSize];
2、路径判断
NSFileManager *nfManager = [NSFileManager defaultManager];
NSURL *url1 = [nfManager URLForDirectory:NSDocumentDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:YES
error:nil];
// 判断路径是否存在
/*
如果当前路径以~开头,需使用 NSString 的 stringByExpandingTildeInPath 方法进行处理,否则会返回 false
*/
BOOL bl1 = [nfManager fileExistsAtPath:[url1 path]];
// 判断指定路径是否有可读权限
BOOL bl2 = [nfManager isReadableFileAtPath:[url1 path]];
// 判断指定路径是否有可写权限
BOOL bl3 = [nfManager isWritableFileAtPath:[url1 path]];
// 判断指定路径是否有可执行权限
BOOL bl4 = [nfManager isExecutableFileAtPath:[url1 path]];
// 判断指定路径是否有可删除权限
BOOL bl5 = [nfManager isDeletableFileAtPath:[url1 path]];
// 判断两个指定路径的内容是否相同
BOOL bl6 = [nfManager contentsEqualAtPath:[url1 path] andPath:[[url1 path] stringByAppendingString:@"/test.txt"]];
3、文件操作
NSURL *fileUrl = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0];
// 文件打开
NSFileHandle *nfHandle = [NSFileHandle fileHandleForUpdatingAtPath:[[fileUrl path] stringByAppendingString:@"/test.txt"]];
NSFileHandle *nfHandle1 = [NSFileHandle fileHandleForReadingAtPath:[[fileUrl path] stringByAppendingString:@"/test.txt"]];
NSFileHandle *nfHandle2 = [NSFileHandle fileHandleForWritingAtPath:[[fileUrl path] stringByAppendingString:@"/test.txt"]];
// 文件句柄偏移量
// 获取文件句柄指针的偏移量
unsigned long long offSetNum1 = [nfHandle offsetInFile];
// 将偏移量移到文件末尾,返回移动后的指针偏移量
unsigned long long offSetNum2 = [nfHandle seekToEndOfFile];
// 将偏移量指向特定的位置
[nfHandle seekToFileOffset:0];
// 文件读取
// 获取当前文件句柄的可用数据,获取后指针移到文件末尾
NSData *availableData = [nfHandle availableData];
// 获取从当前指针位置到文件结束的所有数据,获取后指针移到文件末尾
NSData *data1 = [nfHandle readDataToEndOfFile];
// 获取从当前指针位置开始读取的 length 长度的数据内容,获取后指针移到文件读取到的位置
NSData *data2 = [nfHandle readDataOfLength:10];
// 文件写入
// 从当前指针位置写入数据到文件
[nfHandle writeData:[@"你好" dataUsingEncoding:NSUTF8StringEncoding]];
// 文件关闭
// 关闭文件
[nfHandle closeFile];
// 文件比较
NSFileManager *nfManager = [NSFileManager defaultManager];
// 文件路径
NSString *filePath1 = [NSHomeDirectory() stringByAppendingString:@"/Desktop/file1.txt"];
NSString *filePath2 = [NSHomeDirectory() stringByAppendingString:@"/Desktop/file2.txt"];
[nfManager createFileAtPath:filePath1
contents:[@"北京欢迎您" dataUsingEncoding:NSUTF8StringEncoding]
attributes:nil];
[nfManager createFileAtPath:filePath2
contents:[@"北京欢迎" dataUsingEncoding:NSUTF8StringEncoding]
attributes:nil];
// 比较两个文件的内容是否相等
BOOL bl = [nfManager contentsEqualAtPath:filePath1 andPath:filePath2];
iOS - OC NSFileManager 文件管理的更多相关文章
- OC基础 文件管理
OC基础 文件管理 1.文件管理类NSFileManager对象的创建: NSFileManager *fm = [NSFileManager defaultManager]; 2.文件操作: (1 ...
- OC NSFileManager(文件路径操作)
OC NSFileManager(文件路径操作) 初始化 NSFileManager * fm = [NSFileManager defaultManager]; 获取当前目录 [fm current ...
- iOS - OC 面向对象语法
1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...
- ios+oc面试题
ios+oc面试题 浅复制和深复制的区别?//浅拷贝和深拷贝答案:浅层复制(copy):只复制指向对象的指针,而不复制引用对象本身.//通过对象的指针来访问这个对象深层复制(mutableCo ...
- iOS OC语言原生开发的IM模块--RChat
iOS OC语言原生开发的IM模块,用于项目中需要原生开发IM的情况,具备发送文字.表情.语音.图片.视频等完整功能,包含图片预览视频播放等功能,此项目将会长期更新如有问题可以提出,我的邮箱:fshm ...
- 【原】iOS学习之文件管理器(NSFileManager)和文件对接器(NSFileHandle)
1.文件管理器(NSFileManager) 1> 主要作用及功能方法 主要作用:此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 功能方法: 2> 创建文件夹 创建所 ...
- IOS--文件管理NSFileManager
iOS的沙盒机制.应用仅仅能訪问自己应用文件夹下的文件.iOS不像android.没有SD 卡概念.不能直接訪问图像.视频等内容. iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒 ...
- 一道题看懂OC的文件管理:NSFileManager,计算文件包含内存大小
计算文件夹下所有文件的大小 // 查看错误信息 __autoreleasing NSError *error; // 文件管理对象 NSFileManager *manager = [NSFileMa ...
- iOS - OC Foundation 框架
前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...
随机推荐
- zjtd 2016面试
1.写一个函数get_next() class A{ public :int next(); //取下一个值,并且指针后移 bool has_next(); private: //可以认为是一个q ...
- docker stop 与 docker kill的区别
docker stop 与 docker kill 均可以将容器停掉,但二者究竟有什么区别呢?首先,摘录一下官网对这两个功能的描述: docker stop: Stop a running conta ...
- Mongodb 和Redis 的相同点和不同点
MongoDB和Redis都是NoSQL,采用结构型数据存储.二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同.MongoDB建议集群部署,更多的考虑到集群 ...
- [ios][opengles]OpenGL ES基础知识简介
参考: http://www.cnblogs.com/shangdahao/archive/2011/11/05/2233587.html 3D变换:模型,视图,投影与Viewport: http:/ ...
- [转]iOS应用程序生命周期(前后台切换,应用的各种状态)详解
转载地址:http://blog.csdn.net/totogo2010/article/details/8048652 iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变 ...
- JAVA基础知识之Collections工具类
排序操作 Collections提供以下方法对List进行排序操作 void reverse(List list):反转 void shuffle(List list),随机排序 void sort( ...
- gcc/g++动态链接库和静态库的链接顺序
转自:http://withc8212.blog.163.com/blog/static/11656983820109263562854/ so文件:动态库a文件: 静态库exe文件:可执行程序(li ...
- 洛谷P1017 进制转换
洛谷P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 \(1*10 ...
- shell脚本例子集锦(习题总结)
练习一:写一个脚本 .设定变量FILE的值为/etc/passwd .依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么 形如:(提示:LINE=`wc -l /etc/passw ...
- 解决Duilib创建的win32窗口拖到屏幕上边缘自动最大化
转载:http://bbs.csdn.net/topics/390842294 使用Duilib创建窗口的时候,假如有这样一个需求: 1.窗口大小规定 2.不可拖拽改变窗口大小 3.双击标题栏禁止最大 ...