文件和目录的操作和管理

文件和目录管理

1:什么文件和目录管理

文件目录管理:就是指文件和目录的创建,目录的遍历,文件目录的复制,剪切,删除等

2:文件管理器对象的创建(单例对象)

NSFileManager * fm = [NSFileManager defaultManager];

//文件管理器的创建

void createFileManage(void){

    //fileManage对象一旦创建完成后,后续所有的文件操作都是通过fileManage进行操作的

    NSFileManager *fileManage = [NSFileManager defaultManager];//创建一个单例类的对象

    

}

3:文件和目录的创建

//创建普通文件//如果两个文件的文件名相同时,创建成功,但是会用新文件覆盖旧的文件

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


//创建目录//第二个参数是:当自路径不存在时是否创建子路径

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

//文件和目录的创建

void createFileAndDir(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileManager *fileManage = [NSFileManager defaultManager];

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

    //作用:创建文件

    //path:创建的文件路径

    //data:创建文件开始时给文件添加内容,如果时nil,创建的文件就是空文件

    //attr:文件属性

    [fileManage createFileAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] contents:nil attributes:nil];

    

    //- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error NS_AVAILABLE(10_5, 2_0);

    //作用:创建目录

    //path:目录的路径

    //createIntermediates:如果创建的路径的自路径不存在时,是否连同自路径一起创建

    //attributes:文件属性

    //error:如果创建失败,保存创建失败的原因

    NSError *error = nil;

    [fileManage createDirectoryAtPath:[pathDesktop stringByAppendingString:@"/dir/dir1"] withIntermediateDirectories:NO attributes:nil error:&error];

    if (error) {

        NSLog(@"创建目录失败 : %@", [error localizedFailureReason]);

    }

}


4:目录的遍历(traverse)

//浅度遍历

- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;

//深度遍历

- (NSArray *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error

//目录的遍历

void traverseDir(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileManager *fileManage = [NSFileManager defaultManager];

    //- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);

    //作用:浅层遍历,只能遍历一层

    NSArray *arrayContent = [fileManage contentsOfDirectoryAtPath:[pathDesktop stringByAppendingString:@"/dir"] error:nil];

    NSLog(@"%@", arrayContent);

    //- (NSArray *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);

    //作用:深层遍历,一直遍历到最后一层

    NSArray *arraySub = [fileManage subpathsOfDirectoryAtPath:[pathDesktop stringByAppendingString:@"/dir"] error:nil];

    NSLog(@"%@", arraySub);

}


5:复制文件和目录

//srcPath:原文件路径

//dstPath:新文件路径

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

//复制文件或目录

void copyFileAndDir(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileManager *fileManage = [NSFileManager defaultManager];

    //- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error NS_AVAILABLE(10_5, 2_0);

    //作用:文件或目录的复制

    //复制文件

    [fileManage copyItemAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] toPath:[pathDesktop stringByAppendingString:@"/dir/fileCopy.txt"] error:nil];

    [fileManage copyItemAtPath:[pathDesktop stringByAppendingString:@"/dir/dir1"] toPath:[pathDesktop stringByAppendingString:@"/dir1Copy"] error:nil];

}

6:剪切(cut)文件和目录

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

//剪切文件或目录

void cutFileAndDir(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileManager *fileManage = [NSFileManager defaultManager];

    //- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error NS_AVAILABLE(10_5, 2_0);

    //作用:剪切文件或目录

    [fileManage moveItemAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] toPath:[pathDesktop stringByAppendingString:@"/dir/dir1/fileCut.txt"] error:nil];

}



7:删除文件和目录

- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error;

//删除文件或目录

void deleteFileAndDir(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileManager *fileManage = [NSFileManager defaultManager];

    //- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);

    //作用:删除文件或目录

    [fileManage removeItemAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] error:nil];

}

8:获取文件属性(attribute)

- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error

//获取文件的属性

void getAttribute(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileManager *fileManage = [NSFileManager defaultManager];//创建单例对象

    //- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);

    //作用:获取文件或目录的相关属性

    NSDictionary *dictionaryFile = [fileManage attributesOfItemAtPath:[pathDesktop stringByAppendingString:@"/file.txt"] error:nil];

    NSDictionary *dictionaryDir = [fileManage attributesOfItemAtPath:[pathDesktop stringByAppendingString:@"/dir"] error:nil];

    NSLog(@"%@", dictionaryFile);

    NSLog(@"%@", dictionaryDir);

}


9:判断文件是否存在

- (BOOL)fileExistsAtPath:(NSString *)path;

//判断文件是否存在

void isHaveFileOrDir(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileManager *fileManage = [NSFileManager defaultManager];//创建单例对象

    

    if ([fileManage fileExistsAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]]) {

        NSLog(@"有这个文件");

    } else {

        NSLog(@"没有这个文件");

    }

    

}


文件操作

1:什么是文件操作

文件操作:就是指对文件的打开,文件内容的读、写、设置偏移量和同步

2:文件的打开

//以只读方式打开

    + (id)fileHandleForReadingAtPath:(NSString *)path;

//以只写方式打开

+ (id)fileHandleForWritingAtPath:(NSString *)path;

//以读写方式打开

+ (id)fileHandleForUpdatingAtPath:(NSString *)path;

//文件的打开

void openFile(void){

    //注意:NSFileHandle对象创建完成后,后续所有对文件内的操作都是通过NSFileHandle对象来完成的

    NSString *pathDesktop = @"/Users/mac/Desktop";

    //+ (id)fileHandleForReadingAtPath:(NSString *)path;

    //作用:以只读的方式打开文件

    NSFileHandle *fileHandleRead = [NSFileHandle fileHandleForReadingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];

    //+ (id)fileHandleForWritingAtPath:(NSString *)path;

    //作用:以只写的方式打开文件

    NSFileHandle *fileHandleWrite = [NSFileHandle fileHandleForWritingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];

    //+ (id)fileHandleForUpdatingAtPath:(NSString *)path;

    //作用:以读写的方式打开文件

    NSFileHandle *fileHandleUp = [NSFileHandle fileHandleForUpdatingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];

}

3:文件内容的读取

1:读取指定长度的数据

- (NSData *)readDataOfLength:(NSUInteger)length;

2:从当前偏移量读到文件末尾

- (NSData *)readDataToEndOfFile;

//文件内容的读取

void readFile(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];//以读写的方式打开文件

#if 0

    //- (NSData *)readDataOfLength:(NSUInteger)length;

    //作用:读取文件中指定长度的数据

    NSData *dataFromFile = [fileHandle readDataOfLength:6];

    NSString *stringFromData = [[NSString alloc] initWithData:dataFromFile encoding:NSUTF8StringEncoding];//data转换成string

    NSLog(@"%@", stringFromData);

#endif

    //- (NSData *)readDataToEndOfFile;

    //作用:读取文件中所有的数据

    NSData *dataFromFile = [fileHandle readDataToEndOfFile];

    NSString *stringFromData = [[NSString alloc] initWithData:dataFromFile encoding:NSUTF8StringEncoding];

    NSLog(@"%@", stringFromData);

}

4:写文件

- (void)writeData:(NSData *)data;


//向文件中写数据

void writeDataToFile(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];//以读写的方式打开文件

    NSString *string = @"chen chao zui shuai";

    NSData *dataFromString = [string dataUsingEncoding:NSUTF8StringEncoding];//string转换成data

    //- (void)writeData:(NSData *)data;

    //作用:向文件中写数据(覆盖之前内容)

    [fileHandle writeData: dataFromString];

    //思考:文件末尾出写入@"chen chao ni zui shuai"

    NSLog(@"%@", [[NSString alloc] initWithData:[fileHandle readDataOfLength:5] encoding:NSUTF8StringEncoding]);

}


5:设置文件偏移量

1:将文件偏移量设置到文件中的指定位置

- (void)seekToFileOffset:(unsigned long long)offset;

2:将文件偏移量设置到文件末尾

- (unsigned long long)seekToEndOfFile;

//设置文件偏移量

void setFileSeek(void){

    NSString *pathDesktop = @"/Users/mac/Desktop";//桌面路径

    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:[pathDesktop stringByAppendingString:@"/file.txt"]];//以读写的方式打开文件

    [fileHandle seekToFileOffset:5];//设置文件偏移量到指定位置

    [fileHandle seekToEndOfFile];//设置文件偏移量到文件末尾

    NSLog(@"%@", [[NSString alloc] initWithData:[fileHandle readDataOfLength:4] encoding:NSUTF8StringEncoding]);

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值