【NSFileManager的其他常用方法 创建文件等 Objective-C语言】

本文介绍了如何使用Objective-C的NSFileManager类进行文件和目录的操作,包括创建文件、创建文件夹、拷贝文件、移动文件以及删除文件。详细讲解了各个方法的参数和使用场景,并通过实例演示了文件内容的二进制转换以及创建文件的过程。此外,还提到了权限问题和文件移动用于重命名的技巧。

一、NSFileManager的其他常用方法——创建文件

1.在指定的目录创建文件

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

例如,我现在想要干嘛呢,想要在桌面上创建1个文件

先拿到manager对象啊,

FileManager *manager = [FileManager defaultManager];

//创建1个文件很简单,就调用这个文件管理员的方法,叫做createFileAtPath

[manager createFileAtPath:(nonnull NSString *)path contents:(nullable NSData *) attributes:(nullable NSDictionary< NSString *,id> *)];

第一个参数:(nonnull NSString *)path,不用解释了,是不是路径,

这个是路径啊,就是你创建的这个文件在哪儿,

我给个桌面上的路径,

@“/Users/Apple/Desktop/haha.txt”

第二个参数:contents:(nullable NSData *),就是这个文件的内容,

第三个参数:attributes:(nullable NSDictionary< NSString *,id> *)

就是这个文件的属性,

就是你创建这个文件的时候,你可以指定这个文件的属性,例如,你可以指定这个文件的创建时间,修改时间,你都可以指定的啊,

但是你如果说,你不想指定,你就希望它用系统的默认值,那就给个什么呢,给个nil

给个nil,它就使用系统的默认值了,

我要说的重点是第二个参数:contents:(nullable NSData *)

我们刚刚说,第二个参数什么意思啊,是不是这个文件的内容啊,那这个文件的内容,能不能给个字符串呢,

不能,为什么,因为这个参数是什么类型的,NSData类型的,记住,这个需要你理解一下啊,这个NSData是什么意思,

存储在我们这个磁盘上的任何文件,都是以二进制的形式存储的,

所以第二个参数什么参数呢,要求你给这个文件的二进制数据,

就是这个文件的二进制数据是什么,你把那个二进制数据给我就可以了,

所以,第二个参数是文件的内容,要求是文件的二进制的内容,

NSData对象,就是专门用来保存二进制数据的,

问题来了,二进制,我靠,我怎么写啊,

你会写吗,不会

那怎么办呢,很简单,

例如,我有个字符串,NSString *str = @“上海浦东区中山路23号”

这个字符串提供一个方法,这个字符串本身自己有一个方法,它可以把这个字符串转成二进制,也就是说,把这个字符串转成一个二进制数据,什么类型的,NSData类型的,

这个方法叫什么呢,叫dataUsingEncoding,这个方法的签名如下:

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding

你看它返回一个什么东西,NSdata对象,是不是返回一个二进制数据啊

指定1下编码,我们说过,编码用什么,NSUTF8StringEncoding,

[str dataUsingEncoding:NSUTF8StringEncoding];

这个时候它会做什么事情呢,就会把这个字符串,以UTF8的编码,转成二进制数据,

存到我们的NSData对象里面,我用NSData类型的变量接1下啊,

NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

这个时候,我第2个参数给什么呢,我就给个data对象,就可以了,

[manager createFileAtPath:@“/Users/Apple/Desktop/haha.txt” contents:data attributes:nil];

这个时候,这个data对象里面存的是什么,存的是@"上海浦东区中山路23号"这个字符串的二进制数据,

这个方法返回什么呢,这个方法的签名如下:

- (BOOL)createFileAtPath:(NSString *)path contents:(nullable NSData *)data attributes:(nullable NSDictionary< NSString *,id> *)attr;

返回1个BOOL类型的变量

这个BOOL类型的变量,你猜代表什么意思,是否写入成功吧

我用BOOL类型的变量接1下啊,

BOOL res = [manager createFileAtPath:@“/Users/Apple/Desktop/haha.txt” contents:data attributes:nil];

if(res == YES){

NSLog(@“写入成功”);

}else{

NSLog(@“写入不成功”);

}

输出:失败,

你知道为什么失败吗,我们说你想知道原因的话,对了,你没有权限,

你要往桌面上写是没有权限的吧,我们刚刚把桌面锁定了吧,

资源管理器里,找到桌面,点右键,选择显示简介,把锁定的钩去掉,

好,再写,成功,

桌面上找到这个haha.txt文件,打开,显示:上海浦东区中山路23号

所以,你要去创建文件,通过这种方式创建,

1)先把这个字符串@“上海浦东区中山路23号”转成二进制数据,

2)再用这个方法把二进制数据传过去,就可以了,

那如果我想创建1个空文件,怎么办呢,我就想创建1个文件,但里面什么都没有,那你就在第二个参数的地方,给个nil就可以了,对,内容就不给,给个nil,就可以了,

好了,这就是我们这个方法,在指定的目录创建1个文件,

二、在指定的目录,创建文件夹,

1.- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error

创建文件夹,怎么去创建呢,

先拿到我们的manager对象吧,

NSFileManager *manager = [NSFileManager defaultManager];

[manager createDirectoryAtPath:(nonnull NSString *) withIntermediateDirectories:(BOOL) attributes:(nullable NSDictionary< NSString *,id> *) error:(NSError **)];

第一个参数,(nonnull NSString *)path,这个不用解释了,是不是创建文件夹的路径啊,来一个啊,@“/Users/Apple/Desktop/霸气”

对了,我们说过,创建之前,你最好是先去看一下能不能创建,

第二个参数,是不是BOOL类型的,什么意思啊,我也不知道,随便给,是不是随便给啊,我随便给个NO,

第三个参数,attributes,什么意思啊,是不是属性,我给个nil,代表什么意思,是不是使用这个系统默认的属性啊,

第四个参数,error,不用解释了吧,错误原因,我不想要错误原因,给个nil,就可以了,如果你想拿到这个错误信息,你给它1个二级指针就可以了啊,

好,返回值来个BOOL,

BOOL res = [manager createDirectoryAtPath:@“/Users/Apple/Desktop/霸气” withIntermediateDirectories:NO attributes:nil error:nil];

if(res == YES){

NSLog(@“成功”);

}else{

NSLog(@“失败”);

}

输出:成功

霸气文件夹来了,是不是这个时候,我就创建了1个文件夹啊,

这个第一个参数,是文件夹的路径,

第三个参数,attributes,是属性,给个nil,就是默认值,

第四个参数,error,就是我们那个错误对象,

重点讲一下第二个参数,(BOOL):withIntermediateDirectories

我给个NO,给个YES,有什么区别,

如果是YES,就做一路创建,如果是NO,就不会做一路创建,

对,什么叫一路创建,

好,我举个例子给你啊,

我现在在桌面上创建一个文件啊,创建一个什么文件呢,创建一个

BOOL res = [manager createDirectoryAtPath:@“/Users/Apple/Desktop/AA/DD/CC/BB/ZZ” withIntermediateDirectories:NO attributes:nil error:nil];

是不是在桌面上创建1个AA文件夹,里面再创建个DD文件夹,里面再创建个CC文件夹,里面再创建个BB文件夹,里面再创建个ZZ文件夹,

运行一下,输出:失败

是不是失败,为什么失败,因为你桌面上根本就没有AA/DD/CC/BB/文件夹啊,

但是如果说,第二个参数,withIntermediateDirectories我给个YES,

BOOL res = [manager createDirectoryAtPath:@“/Users/Apple/Desktop/AA/DD/CC/BB/ZZ” withIntermediateDirectories:YES attributes:nil error:nil];

运行一下,输出:成功

看清楚,桌面上出现了一个AA文件夹,AA里面有个DD,DD里面有个CC,CC里面有个BB,BB里面有个ZZ,

这就叫一路创建,

如果上面这层没有,它就给你创建出来,如果第二个参数给个YES啊,上级目录没有,它就给你创建出来,如果给个NO呢,上级目录没有,它就直接给你报错了,

三、拷贝文件

1.- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error

2.拷贝文件啊,用这个copyItemAtPath toPath方法,

例如啊,我来一个,

[manager copyItemAtPath:(nonnull NSString *) toPath:(nonnull NSString *) error:(NSError **)];

第一个参数,(nonnull NSString *)path,我给个路径啊,给一个@“/Users/Apple/Desktop/abc.plist”

第二个参数,(nonnull NSString *)dstPath,我想把这个文件拷贝到哪儿去呢,拷贝到,@“/Users/Apple/abc.plist”,我是不是要把这个abc.plist文件,从桌面拷贝到哪儿,拷贝到家目录里面去吧,

第三个参数,error:(NSError **),这个不用解释了吧,给个nil,

[manager copyItemAtPath:@“/Users/Apple/Desktop/abc.plist” toPath:@“/Users/Apple/abc.plist” error:nil];

好,我用BOOL类型的变量接1下,

BOOL res = [manager copyItemAtPath:@“/Users/Apple/Desktop/abc.plist” toPath:@“/Users/Apple/abc.plist” error:nil];

LogBOOL(res);

//我前面在main函数前面定义了一个宏啊,

#define LogBOOL(val) NSLog(@“%@”,val == YES?@“YES”: @“NO”)

输出:YES

abc.plist文件就拷贝到家目录了吧,

原来那个桌面上的abc.plist文件还在不在,在,

因为这是为什么,这是拷贝,

四、移动文件,

1. - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error

2.移动和拷贝有什么区别,拷贝原来的还在,移动就是原来的就不在了吧,

例如,我来一个啊,

[manager moveItemAtPath:@“/Users/Apple/Desktop/abc.plist” toPath:@“/Users/Apple/” error:nil];

把桌面上这个abc.plist文件,移到哪儿去呢,移到家目录里面去,

BOOL res = [manager moveItemAtPath:@“/Users/Apple/Desktop/abc.plist” toPath:@“/Users/Apple/” error:nil];

LogBOOL(res);

输出:YES

桌面上的abc.plist文件就移动到家目录里面去了吧

这就是移动,推简单了,

3.我桌面上是不是有1个haha.txt啊,我想用代码给这个haha.txt改个名字,

怎么改,是不是它应该提供一个改名字的方法啊,记住,没有啊,它没有提供改名字的方法,如果你要改名字,怎么办呢,就用这个移动的方法,

你看我们这个移动的方法,我们在移动的时候,是不是可以改名字的啊,

所以我要改名字,很简答,我就把桌面上的haha.txt,移动到桌面上的hehe.txt,就可以了,

BOOL res = [manager moveItemAtPath:@“/Users/Apple/Desktop/haha.txt” toPath:@“/Users/Apple/Desktop/hehe.txt” error:nil];

LogBOOL(res);

输出:YES

这时候,你再看桌面上的haha.txt,就变成hehe.txt了,

所以这个moveItemAtPath方法,可以移动文件,剪切文件,重命名文件,重命名的原理,将文件移动到原来的目录,并改个名字

五、删除文件

1. - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error

2.这个是我们一会儿写的那个病毒里面要用到的方法啊,

删除文件推简单了啊,removeItemAtPath

好,来一个,

[manager removeItemAtPath:@“/Users/Apple/Desktop/hehe.txt” error:nil];

第一个参数,你要给它一个什么啊,给它一个删除文件的路径

例如,我要把桌面上的这个hehe.txt给它删掉,

第二个参数,error对象,不用解释了啊,给它一个nil

返回值是什么呢,BOOL类型,

BOOL res = [manager removeItemAtPath:@“/Users/Apple/Desktop/hehe.txt” error:nil];

LogBOOL(res);

输出:YES

桌面上的hehe.txt文件,是不是没了,

这里有一个问题你要注意啊,废纸篓里面是没有的哦,

所以一会儿你写的时候,你慎用哦,不要把自己宝贵的照片给删掉了哦,

所以,注意啊:删除的文件不会到废纸篓里面去,而是直接删除,所以请小心使用,

好了,以上就是我们这个NSFIleManager的全部方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值