文件操作
来源:互联网 发布:linux zip 压缩 编辑:程序博客网 时间:2024/06/01 08:16
【说明】
nslog:写
stdout [屏幕也是文件]
按键盘:写
文件操作我们分为两类
对于文件夹:创建、删除、拷贝、移动、查看
对于普通文件来说:读取信息和写入信息
1.读
从存储设备到内存是读文件
2.写
从内存到存储设备是写文件
framebuffer
【文件管理类】【NSFileManager】
NSUTF8StringEncoding:可打印汉字
#define SHOWARRAY(array) for(NSString * str in array){\ NSLog(@"%@",str);\}#define SHOWERROR(X) if (error) {\ //打印错误信息\ perror(X);\ NSLog(@"%@",error);\ exit(-1);\}//NSFileManager文件管理类 单例对象,有且只能创建一次 NSFileManager *fm = [NSFileManager defaultManager]; NSLog(@"%@",fm);// _autoreleasing只是来修饰NSError[只在ARC下我们需要写] error = nil; NSError * __autoreleasing error = nil; //error存放的是 该方法的一个错误信息[文件操作必须写Error] //从指定的路径中读取一个文件,里面的所有信息,都会被保存到数组当中去 //浅度遍历 NSArray * array=[fm contentsOfDirectoryAtPath:PATH error:&error]; SHOWERROR("contentsOfDirectory");//深度遍历来展示该目录下的所有文件【包括子目录】 array = [fm subpathsOfDirectoryAtPath:PATH error:&error];//创建一个文件夹 NSString *subPath = [PATH stringByAppendingPathComponent:@"middle/dir"]; [fm createDirectoryAtPath:subPath withIntermediateDirectories:YES attributes:nil error:&error]; //第一个参数:创建文件夹的路径+该文件夹名 //第二个参数:表示是否创建中间目录[可以为多个],如果创建YES,否则NO //第三个参数:表示文件的属性,通常默认nil,表示默认属性 //第四个参数,表示错误信息//创建一个文件【必须有后缀】 //NSDate OC下的二进制数据类型 NSString *contents = @"我是写入的数据"; NSData *data = [contents dataUsingEncoding:NSUTF8StringEncoding]; NSString * filePath=[subPath stringByAppendingPathComponent:@"zn.txt"]; [fm createFileAtPath:filePath contents:data attributes:nil]; //第一个参数:创建文件的路径+该文件的名字(文件后缀)【必须有后缀】 //第二个参数:写入文件的内容 //第三个参数:属性,默认nil,表示默认属性(可读、可写不可执行)//删除文件 @"middle/dir"[也可删除文件] [fm removeItemAtPath:subPath error:&error];//拷贝文件夹或者文件,如果文件和目录已经存在,就不能再拷贝了 NSString * dst = [PATH stringByAppendingPathComponent:@"middeleCopy"]; NSString * src = [PATH stringByAppendingPathComponent:@"middele"]; [fm copyItemAtPath:src toPath:dst error:&error];//移动文件或者文件夹,如果文件或者文件夹已存在,会失败【把里面的内容移动过去】 //移动文件或文件夹,如果文件或文件夹存在,会失败NSString * dst1 = [PATH stringByAppendingPathComponent:@"middleMove/test"]; NSString * src1 = [PATH stringByAppendingPathComponent:@"middle"]; [fm moveItemAtPath:src1 toPath:dst1 error:&error];
【文件句柄】【NSFileHandle】
文件标号
1.对文件本身操作
//NSFileManager文件管理类 单例对象,有且只能创建一次 NSFileManager *fm = [NSFileManager defaultManager];// _autoreleasing只是来修饰NSError[只在ARC下我们需要写] error = nil; NSError * __autoreleasing error = nil; //error存放的是 该方法的一个错误信息[文件操作必须写Error] //从指定的路径中读取一个文件,里面的所有信息,都会被保存到数组当中去//浅度遍历 NSArray * array=[fm contentsOfDirectoryAtPath:PATH error:&error]; SHOWERROR("contentsOfDirectory");//深度遍历来展示该目录下的所有文件【包括子目录】 array = [fm subpathsOfDirectoryAtPath:PATH error:&error]; SHOWERROR("subpathsOfDirectory");//创建一个文件夹 //拼接路径 NSString *subPath = [PATH stringByAppendingPathComponent:@"middle/dir"]; // [fm createDirectoryAtPath:subPath withIntermediateDirectories:YES attributes:nil error:&error]; //第一个参数:创建文件夹的路径+该文件夹名 //第二个参数:表示是否创建中间目录[可以为多个],如果创建YES,否则NO //第三个参数:表示文件的属性,通常默认nil,表示默认属性 //第四个参数,表示错误信息//创建一个文件【必须有后缀】 //NSDate OC下的二进制数据类型 NSString * filePath=[subPath stringByAppendingPathComponent:@"zn.txt"]; NSString * contents = @"我是写入的数据"; NSData * data = [contents dataUsingEncoding:NSUTF8StringEncoding]; [fm createFileAtPath:filePath contents:data attributes:nil]; //第一个参数:创建文件的路径+该文件的名字(文件后缀)【必须有后缀】 //第二个参数:写入文件的内容 //第三个参数:属性,默认nil,表示默认属性(可读、可写不可执行)//删除文件 @"middle/dir"[也可删除文件] [fm removeItemAtPath:subPath error:&error]; [fm removeItemAtPath:filePath error:&error];//拷贝文件夹或者文件,如果文件和目录已经存在,就不能再拷贝了 NSString * dst = [PATH stringByAppendingPathComponent:@"middeleCopy"]; NSString * src = [PATH stringByAppendingPathComponent:@"middele"]; [fm copyItemAtPath:src toPath:dst error:&error];//移动文件或者文件夹,如果文件或者文件夹已存在,会失败【把里面的内容移动过去】 //移动文件或文件夹,如果文件或文件夹存在,会失败 NSString * dst1 = [PATH stringByAppendingPathComponent:@"middleMove/test"]; NSString * src1 = [PATH stringByAppendingPathComponent:@"middle"]; [fm moveItemAtPath:src1 toPath:dst1 error:&error];#define SHOWERROR(X) if (error) {\ //打印错误信息\ perror(X);\ NSLog(@"%@",error);\ exit(-1);\ }//创建一个文件夹 [fm createDirectoryAtPath:[NSString stringWithFormat:@"%@/middle/dir",PATH] withIntermediateDirectories:YES attributes:nil error:&error]; if (error) { NSLog(@"%@",error); exit(-1); } //创建一个文件 [fm createFileAtPath:[NSString stringWithFormat:@"%@/middle/dir/file",PATH] contents:[@"hello" dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; //创建文件时,直接添加了内容@"hello",也可不添加,写为nil //attributes文件属性 nil 表示使用文件默认的属性 [fm createFileAtPath:[NSString stringWithFormat:@"%@/middle/dir/file1",PATH] contents:nil attributes:nil]; //文件的删除【目录,文件】 [fm removeItemAtPath:[NSString stringWithFormat:@"%@/middle",PATH] error:&error]; if (error) { NSLog(@"%@",error); exit(-1); //拷贝:不分文件和路径的 [fm copyItemAtPath:[NSString stringWithFormat:@"%@/DogAndCat",PATH] toPath:[NSString stringWithFormat:@"%@/DogAndCat2",PATH] error:&error];//move[剪切] [fm moveItemAtPath:[NSString stringWithFormat:@"%@/DogAndCat",PATH] toPath:[NSString stringWithFormat:@"%@/DogAndCat2/DogAndCat",PATH] error:&error];
2.对文件内容的操作
NSHandle[文件句柄]
读和写(c 中的文件指针,文件描述符)
//以只读方式打开文件,生成文件句柄 //文件句柄类,创建了一个句柄,可以从该据并重读取信息,就相当于读取该文件 NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:PATH]; //写 //NSFileHandle *fh2 = [NSFileHandle fileHandleForWritingAtPath:PATH]; //读写 //NSFileHandle *fh3 = [NSFileHandle fileHandleForUpdatingAtPath:PATH]; //通过一个读文件的句柄,获取文件内容 //从内存到硬盘是写;从硬盘到内存是读 //读3个字节 //获取指定字节的文件内容,这里读取文件的单位是字节数 //在文件操作中,有一个文件指示器,来记录当前读取或者写入的操作位置,如果没有对这个文件指示器进行操作,那么下一次对文件的操作,就从该位置开始 //如果读物的文件都是中文,那么不能出现半个字 NSData *data=[fh readDataOfLength:100]; NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",str); //每次读取后,下次会继续往后面读 //读指针偏移,每次读的结果接着上一次 //设置文件偏移量 //以文件开头文参照,单位字节数 [fh seekToFileOffset:0]; //将文件指示器设置到文件的末尾,通常是为了往文件中追加写 //[fh seekToEndOfFile]; data = [fh readDataOfLength:100]; NSString * str1 = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",str1); //读到末尾 EOF:end of file //一口气把文件读完【IOS基本都是这样的,直接读完】 //data=[fh readDataToEndOfFile]; //把OC的二进制文件转换为NSString // NSString * str2 = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; // NSLog(@"%@",str2); //写操作 NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:PATH]; NSString * string = @"天王盖地虎,12345\n"; NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding]; //文件截断【预留这么多字节】 //将文件的大小设置成offset之后的数值 [fh truncateFileAtOffset:20]; //放在末尾,追加写 //[fh seekToEndOfFile]; //int n = 10;[循环打10行] //while (n-->0) { [fh writeData:data]; //}//判断是文件还是文件夹int main(int argc, const char * argv[]) {@autoreleasepool { //获取文件属性,文件属性是以字典形式读取的 NSFileManager * fm = [NSFileManager defaultManager]; //保存错误信息【__autoreleasing(自动释放)应该是2个下划线】 NSError *__autoreleasing error = nil; //给数据字典赋值 NSDictionary *attributes = [fm attributesOfItemAtPath:PATH error:&error]; if (error) { perror("attributesOfItemAtPath"); NSLog(@"%@",error); //exit(-1);//程序异常退出 } NSLog(@"%@",attributes);//判断这个文件是否存在BOOL ret=[fm fileExistsAtPath:PATH]; if (YES==ret) { NSLog(@"该文件或者目录存在"); } else { NSLog(@"该文件或者目录不存在"); }//判断是不是目录BOOL isDirectory = NO; //判断文件是不是存在,并且判断他是不是一个文件夹,通过第二个参数的值来判定ret=[fm fileExistsAtPath:PATH isDirectory:&isDirectory]; //方法的返回值,表示该文件或者文件夹是否存在 //isDirectory表示如果YES,这个是一个文件夹,如果NO,这是一个文件 if (YES==ret) { if (YES==isDirectory) { NSLog(@"This is Directory"); } else{ NSLog(@"This is a file"); } } else { NSLog(@"File NO exit"); } }return 0;}
1.读取一个文件的内容,然后在代码中,创建一个文件,将读取的文件写入创建的文件
#define PATH @"/Users/qf/Desktop/1"#define BUFF 100int main(int argc, const char * argv[]) {@autoreleasepool { //创建一个文件管理对象 NSFileManager *fm = [NSFileManager defaultManager]; NSString * fileString =[PATH stringByAppendingPathComponent:@"zn1.txt"]; //创建目标文件 BOOL ret=[fm createFileAtPath:fileString contents:nil attributes:nil]; if (NO==ret) { NSLog(@"Create Faild"); exit(-1); } //创建读文件句柄,操作被复制的文件 NSFileHandle *fhForReading = [NSFileHandle fileHandleForReadingAtPath:[PATH stringByAppendingPathComponent:@"zn.txt"]]; //把被复制的文件内容全部读出来 //创建一个写文件的句柄,操作目标文件 NSFileHandle *fhForWriting = [NSFileHandle fileHandleForWritingAtPath:fileString]; //这样写可以,但一般使用循环实现写 //[fh2 writeData:data]; //单位:字节-数,求出数据长度 //NSInteger length = [data length]; //为了节省内存的占用,通常我们会限制读取和写入的操作,读多少写多少 NSDictionary * dict = [fm attributesOfItemAtPath:[PATH stringByAppendingPathComponent:@"zn.txt"] error:nil]; NSInteger length = [dict fileSize]; NSInteger length1 = [dict[NSFileSize] integerValue]; NSData * data = nil; NSLog(@"%ld",length1); while (length>0) { //当剩余的文件字节数,小于设置的读取长度 if (BUFF>length) { //直接把文件读到末尾 data = [fhForReading readDataToEndOfFile]; [fhForWriting writeData:data]; break; } data = [fhForReading readDataOfLength:BUFF]; [fhForWriting writeData:data]; length -= BUFF; } }return 0;}
阅读全文
0 0
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- 文件操作
- iOS 给TableView添加Footer或Header
- 打开新窗口
- linux accept与epoll惊群问题
- Thinkphp 模型->SQL查询
- npm install 和npm start各种报错无法解决的问题
- 文件操作
- HDU
- Codeforces Beta Round #51 D
- 视频服务器实现思路
- Android View事件分发机制 一(View)
- GJJ的日常之沉迷数学
- (*´Д`*)超讨厌php的变量定义
- Java练习(方法调用)
- 快速幂求模+矩阵的快速幂