博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSFileManager文件管理
阅读量:6151 次
发布时间:2019-06-21

本文共 8661 字,大约阅读时间需要 28 分钟。

前言

  • 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.txtNSString *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];

转载于:https://www.cnblogs.com/CH520/p/9451954.html

你可能感兴趣的文章
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>
mysql内存优化
查看>>
都市求生日记第一篇
查看>>
Java集合---HashMap源码剖析
查看>>
SQL优化技巧
查看>>