iOS文件管理系统NSFileManager使用详解

iOS文件管理系统NSFileManager使用详解

1,找到自己的程序的目录: NSHomeDirectory() ,目录结构为:

---Documents/

---"YourAppName.app"

---Library/

---自己创建的文件夹 或 "自己创建的文件"

---tmp/

所以要找到自己程序的Documents文件夹,可以使用[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

也可以使用:

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *string=[paths objectAtIndex:0];

两者功能应该一样。

2,文件一些主要操作可以通过NSFileManage 来操作,可以通过 [NSFileManger defaultManger] 得到它得实例。

3,使用[aNSString stringByAppendingPathCompnent:aNSString] 来创建文件路径

4,tmp 目录我们可以在里面写入一些程序运行时需要用得数据,里面写入得数据在程序退出后会没有。

可以通过NSTemporaryDirectory();获得其路径。

5,NSFileManager的一些相关操作:

1)创建文件夹:

NSString *myDirectory = [documentDirectory stringByAppendingPathComponent:@"test"];

BOOL ok = [fileManage createDirectoryAtPath:myDirectory withIntermediateDirectories:YES attributes:nil error:&error];

2)取得一个目录下得所有文件名:(如上面的myDirectory)可用

NSArray *file = [fileManager subpathsOfDirectoryAtPath: myDirectory error:nil];

NSArray *files = [fileManager subpathsAtPath: myDirectory ];

NSArray *files=[fileManager  contentsOfDirectoryAtPath:documentDirectory error:&error];

3)读取某个文件:

NSData *data = [fileManger contentsAtPath:myFilePath];//myFilePath是包含完整路径的文件名

或直接用NSData 的类方法:

NSData *data = [NSData dataWithContentOfPath:myFilePath];

4)保存某个文件:

可以用 NSFileManager的

- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;

或 NSData 的

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

- (BOOL)writeToFile:(NSString *)path options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;

5)字符串写入文件:

[str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];

[NSString stringWithContentsOfFile...];

6)移动文件:

if ([fileMgr moveItemAtPath:filePath toPath:filePath2 error:&error] != YES)

7)删除文件:

if ([fileMgr removeItemAtPath:filePath2 error:&error] != YES)

8)判断是否是文件夹:

BOOL isDir = NO;

[fileManager fileExistsAtPath:path isDirectory:(&isDir)];

if (isDir) { ...}

9)以下代码用于获取本机上的文件资源或图片

获取文本:

NSFileManager *fileManager=[NSFileManager defaultManager];

NSData *data=[fileManager contentsAtPath:@"/Developer/Documentation/wxWidgets/docs/lgpl.txt"];

NSString *string=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"%@",string);

获取图片:

NSData *myData=[fileManager contentsAtPath:@"/Users/ruby/Desktop/Photo1.jpg"];

UIImage *myImage=[UIImage imageWithData:myData];

imageView.image=myImage;

//===========================

NSFileManager Class Reference:

概述:

NSFileManager类支持NSURL和NSString作为文件或文件夹的路径。

如果你正在移动、拷贝、连接或删除文件或文件夹,你可以使用一个代理连同file manager一起管理这些操作。代理的任务是确认操作和决定是否继续--当错误发生时。在Mac OS X v10.7以后,代理必须遵守 NSFileManagerDelegate协议。

在iOS5.0以后和Mac OS X v10.7以后,NSFileManager包括了管理存储在云端的items的方法。标记为云存储的文件和文件夹被同步到iCloud。item在一个位置的更改会在同步时 are propagated to all other locations。

线程考虑:

NSFileManager可以安全地在多个线程中调用。然而,如果你使用一个delegate来接收move,copy,remove,and link操作的通知,你应该

创建一个唯一的file manager 对象的实例,指定你的代理到这个对象,并使用这个file manager来初始化你的操作。

任务:

1)创建一个File Manager:

- init   如果你打算使用delegate,你应该使用init方法创建一个fileManager

+defaultManager

2)发现文件夹内容:

– contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error:

– contentsOfDirectoryAtPath:error:

– enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:

– enumeratorAtPath:

– mountedVolumeURLsIncludingResourceValuesForKeys:options:

– subpathsOfDirectoryAtPath:error:

– subpathsAtPath:

3)创建和删除items:

– createDirectoryAtURL:withIntermediateDirectories:attributes:error:

– createDirectoryAtPath:withIntermediateDirectories:attributes:error:

– createFileAtPath:contents:attributes:

– removeItemAtURL:error:

– removeItemAtPath:error:

– replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:

4)移动和拷贝 Items

– copyItemAtURL:toURL:error:

– copyItemAtPath:toPath:error:

– moveItemAtURL:toURL:error:

– moveItemAtPath:toPath:error:

5)Determining Access to Files

– fileExistsAtPath:

– fileExistsAtPath:isDirectory:

– isReadableFileAtPath:

– isWritableFileAtPath:

– isExecutableFileAtPath:

– isDeletableFileAtPath:

6)Getting and Setting Attributes

– componentsToDisplayForPath:

– displayNameAtPath:

– attributesOfItemAtPath:error:

– attributesOfFileSystemForPath:error:

– setAttributes:ofItemAtPath:error:

7)Getting and Comparing File Contents

– contentsAtPath:

– contentsEqualAtPath:andPath:

8)Converting File Paths to Strings

– fileSystemRepresentationWithPath:

– stringWithFileSystemRepresentation:length:

9)Managing the Delegate

– setDelegate:

– delegate

10)Managing the Current Directory

– changeCurrentDirectoryPath:

– currentDirectoryPath

NSFileManagerDelegate Protocol Reference:

Moving an Item

– fileManager:shouldMoveItemAtURL:toURL:

– fileManager:shouldMoveItemAtPath:toPath:

– fileManager:shouldProceedAfterError:movingItemAtURL:toURL:

– fileManager:shouldProceedAfterError:movingItemAtPath:toPath:

Copying an Item

– fileManager:shouldCopyItemAtURL:toURL:

– fileManager:shouldCopyItemAtPath:toPath:

– fileManager:shouldProceedAfterError:copyingItemAtURL:toURL:

– fileManager:shouldProceedAfterError:copyingItemAtPath:toPath:

Removing an Item

– fileManager:shouldRemoveItemAtURL:

– fileManager:shouldRemoveItemAtPath:

– fileManager:shouldProceedAfterError:removingItemAtURL:

– fileManager:shouldProceedAfterError:removingItemAtPath:

Linking an Item

– fileManager:shouldLinkItemAtURL:toURL:

– fileManager:shouldLinkItemAtPath:toPath:

– fileManager:shouldProceedAfterError:linkingItemAtURL:toURL:

– fileManager:shouldProceedAfterError:linkingItemAtPath:toPath:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一...
    绚雨蓝了个枫阅读 4,081评论 0 2
  • 1、常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path//从一...
    少年不知代码贵阅读 959评论 1 1
  • 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一...
    tzhtodd阅读 1,273评论 0 2
  • 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一...
    陆号阅读 1,308评论 0 1
  • 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一...
    1d5cb7cff98d阅读 1,760评论 0 0