#define PATH @"/Users/qianfeng/Desktop/CheckOut"
#define ShowArray(array) for(NSString *str in array){\
NSLog(@"%@",str);\
}
int main(int argc,constchar * argv[]) {
@autoreleasepool {
//创建单例对象,即是文件管理对象
NSFileManager *fileManager=[NSFileManagerdefaultManager];
NSError *error=nil;//定义一个空的错误信息
#pragma mark -浅度遍历
#pragma mark 因为这个方法只查看在指定目录下的文件和子目录,并不查看子目录下的内容
//查看某个目录下的文件或者子目录
NSArray * array=[fileManagercontentsOfDirectoryAtPath:PATHerror:&error];
//如果查看失败,例如目录不存在,该方法会创建一个NSError对象,让传入的指针指向这个对象
//如果成功,会创建一个数组,装文件和子目录名称,返回数组地址
if (error) {
NSLog(@"%@",error);
exit(-1);//表示异常退出
}
ShowArray(array);
#pragma mark - 深度遍历
#pragma mark 返回指定目录下的文件名和子目录名,同时遍历子目录下的内容
NSArray *array2=[fileManagersubpathsOfDirectoryAtPath:PATHerror:&error];
if (error) {
NSLog(@"%@",error);
exit(-1);
}
ShowArray(array2);
#pragma mark - 创建路径
//拼接路径
NSString * pathString=[PATH stringByAppendingPathComponent:@"down/up/dir"];
//创建目录
[fileManager createDirectoryAtPath:pathStringwithIntermediateDirectories:YESattributes:nilerror:&error];
//第二个参数表示是否创建中间目录,(此例中创建中间目录down文件夹,up文件夹),如果选NO,当缺失中间目录,创建失败,报错。如果选YES,会自动补全缺失的中间目录,即中间目录也会被创建。可以同时添加多个中间目录
//第三个参数表示目录属性,通常传入nil,表示默认属性
if (error) {
NSLog(@"%@",error);
exit(-1);
}
#pragma mark - 创建文件
NSString * str=@"我是写入的字符串";
NSData * data=[strdataUsingEncoding:NSUTF8StringEncoding];
//将str转换成二进制数据包NSData类型
BOOL ret=[fileManagercreateFileAtPath:[PATHstringByAppendingPathComponent:@"write.txt"]contents:dataattributes:nil];
//第二个参数contents:是写入文件的内容。如果只创建文件,不想写入内容,填入nil
//通过返回值报错
if (ret==NO) {
//perror 可以打印出当前错误
//打印最近一次系统错误信息
perror("creatFile");
exit(-1);
}
#pragma mark - 删除文件
//删除目录或文件
[fileManager removeItemAtPath:[PATHstringByAppendingPathComponent:@"down"]error:&error];
if (error) {
NSLog(@"%@",error);
}
#pragma mark - 判断文件是否存在
NSString *filePath=[PATHstringByAppendingPathComponent:@"write.txt"];
//判断一个文件是否存在,是否是目录
BOOL isDirectory=NO;
BOOL ret2=[fileManagerfileExistsAtPath:filePath isDirectory:&isDirectory];
NSLog(@"%d-%d",ret2 ,isDirectory);
//如果文件存在,返回值ret为YES,否则为NO
//如果文件为目录,参数isDirectory为YES,否则为NO
#pragma mark - 获取一个文件的属性
NSDictionary *attribute=[fileManagerattributesOfItemAtPath:PATHerror:&error];
if (error) {
NSLog(@"%@",error);
exit(-1);
}
NSLog(@"%@",attribute);
//取出文件大小,取出的是一个NSNumber对象,通过integerValue返回数字
//size_t 一般用来计数
size_t size=[[attributeobjectForKey:@"NSFileSize"]integerValue];//打印出文件的大小
NSLog(@"%lu",size);
#pragma mark - 复制文件
NSString *dst=[PATHstringByAppendingPathComponent:@"拷贝文件.txt"];
NSString *src2=[PATHstringByAppendingPathComponent:@"write.txt"];
//目的目录一定是完整的,最后落实到生成文件的名字,即使生成文件和源文件同名,也必须写明
[fileManagercopyItemAtPath:src2toPath:dst error:&error];
if (error) {
NSLog(@"%@",error);
exit(-1);
}
#pragma mark - 移动文件或目录,相当于把文件内容移到目标文件
[fileManager moveItemAtPath:[PATHstringByAppendingPathComponent:@"复制文件3"]toPath:[PATHstringByAppendingPathComponent:@"未命名文件夹/复制文件3"]error:&error];
if (error) {
NSLog(@"%@",error);
exit(-1);
}
需要注意的是当你移动文件时,如果原路径和新路径都在同一个文件夹中,那么新文件名会覆盖掉旧的文件名