文件操作
来源:http://my.oschina.net/outatu/blog/125589
1.文件的浅度遍历与深度遍历
01 |
//NSFileManager * fm = [[NSFileManager alloc]init];//创建文件管理器 |
02 |
//第一步创建一个文件管理器 |
03 |
NSError * error= nil; |
04 |
//显示路径下的内容,作用类似于ls -a指令 |
05 |
//返回值是把目录下的内容放到NSArray中 |
06 |
//浅度遍历 |
07 |
NSFileManager * fm = [NSFileManager defaultManager]; |
08 |
NSArray * array = [fm contentsOfDirectoryAtPath:@ "/Users/aaaaa/Desktop" |
09 |
error:&error]; |
10 |
//成功返回nil错误返回失败信息 |
11 |
if (error) |
12 |
{ |
13 |
NSLog(@ "Error=%@" ,error); |
14 |
return -1; //代表函数返回(结束函数) |
15 |
//exit(1);//结束当前进程 |
16 |
} |
17 |
else |
18 |
{ |
19 |
NSLog(@ "array=%@" ,array); |
20 |
} |
21 |
|
22 |
//深度遍历 |
23 |
//可以显示子目录的内容 |
24 |
NSArray * array1 = [fm subpathsOfDirectoryAtPath:@ "/Users/aaaaa/Desktop" |
25 |
error:&error]; |
26 |
if (error) |
27 |
{ |
28 |
NSLog(@ "Error=%@" ,error); |
29 |
} |
30 |
else |
31 |
{ |
32 |
NSLog(@ "array1=%@" ,array1); |
33 |
} |
2.创建目录
01 |
NSFileManager * fm = [NSFileManager defaultManager]; |
02 |
NSError * error = nil; |
03 |
//当前路径指的是可执行程序的路径而不是代码的路径 |
04 |
//创建目录 返回值:创建成功返回YES 失败返回NO |
05 |
BOOL ret = [fm createDirectoryAtPath:@ "./hello2/world" //创建目录的路径 |
06 |
withIntermediateDirectories:YES //路径不存在是否创建目录 YES代表创建(会把不存在的目录也创建) NO代表不创建 |
07 |
attributes:nil //文件属性(权限),通常写nil代表默认权限 |
08 |
error:&error]; |
09 |
if (ret) |
10 |
{ |
11 |
NSLog(@ "success!" ); |
12 |
} |
13 |
else |
14 |
{ |
15 |
NSLog(@ "error = %@" ,error); |
16 |
} |
3.创建文件
1 |
NSFileManager * fm = [NSFileManager defaultManager]; |
2 |
//创建文件 |
3 |
BOOL ret = [fm createFileAtPath:@ "./1.txt" //路径以及文件名 |
4 |
contents:nil //要创建的文件的内容 nil代表空文件 若文件以及存在会覆盖该文件 |
5 |
attributes:nil]; |
6 |
[fm fileExistsAtPath:@ "./1.txt" ] //判断文件时候存在 |
4.拷贝文件/目录
1 |
NSFileManager * fm = [NSFileManager defaultManager]; |
2 |
NSError * error = nil; |
3 |
//拷贝文件/目录 |
4 |
//第二个参数必须要写全文件或者目录名字 |
5 |
BOOL ret = [fm copyItemAtPath:@ "/Users/aaaaa/Desktop/string.c" //要复制的文件的路径 |
6 |
toPath:@ "./1.txt" //目的文件(文件名不要加空格)若以及存在会返回error |
7 |
error:&error]; |
5.移动(重命名)文件/目录
1 |
//重命名(移动)文件或目录 |
2 |
//重命名:就是修改文件路径 |
3 |
//如果文件/目录存在 移动失败 |
4 |
ret = [fm moveItemAtPath:@ "/Users/aaaaa/Desktop/" |
5 |
toPath:@ "./1/1" //参数要写全称 |
6 |
error:&error]; |
6.删除文件/目录
1 |
//删除文件/目录 |
2 |
//谨慎使用(会直接删除 不会丢到废纸篓中) |
3 |
ret = [fm removeItemAtPath:@ "./1.txt" |
4 |
error:&error]; |
7.NSData与字符串
1 |
NSString * str = @ "hello world" ; |
2 |
//将OC字符串转换成NSData类型 |
3 |
//NSData 文件缓冲区 |
4 |
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding]; |
5 |
|
6 |
//将NSData类型转换成NSString类型 |
7 |
NSString * str2 = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; |
8.文件读写操作
01 |
//文件读写操作 |
02 |
//第一步打开文件 |
03 |
//FILE * fp = fopen("./1.txt","w");文件指针 |
04 |
//文件句柄 |
05 |
//以只读方式打开 |
06 |
NSFileHandle * fh = [NSFileHandle fileHandleForReadingAtPath:@ "/Users/aaaaa/Desktop/string.c" ]; |
07 |
|
08 |
//以只写方式打开 |
09 |
fh = [NSFileHandle fileHandleForWritingAtPath:@ "/Users/aaaaa/Desktop/string.c" ]; |
10 |
//以读写方式打开 |
11 |
fh = [NSFileHandle fileHandleForUpdatingAtPath:@ "/Users/aaaaa/Desktop/string.c" ]; |
12 |
13 |
//OC的打开函数都会把偏移量定位在未见首 |
14 |
//若想在文件尾进行操作,可将文件偏移量定位到文件尾 |
15 |
[fh seekToEndOfFile]; //定位到文件尾 |
16 |
|
17 |
NSData * data1 = [fh readDataOfLength:10]; //读取指定个数字节 |
18 |
NSData * data2 = [fh readDataToEndOfFile]; //从当前偏移量读到文件尾 |
19 |
[fh seekToFileOffset:10]; //把文件偏移量定位到10字节 |
9.向文件中写数据
1 |
NSFileHandle * fh2 = [NSFileHandle fileHandleForUpdatingAtPath:@ "./1.txt" ]; |
2 |
NSString * str = @ "hello world" ; |
3 |
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding]; |
4 |
//写数据必须要转化为NSData |
5 |
[fh2 writeData:data]; |
10.获取文件长度
1 |
//通过文件管理器获取文件属性然后通过字典获取文件长度 |
2 |
NSFileManager * fm = [NSFileManager defaultManager]; |
3 |
NSDictionary * dict = [fm attributesOfItemAtPath:@ "/Users/aaaaa/Desktop/string.c" error:&error]; |
4 |
//方法一: |
5 |
NSLog(@ "size = %lld" ,[dict fileSize]); |
6 |
//方法二: |
7 |
NSLog(@ "%@" ,[dict objectForKey:NSFileSize]); |
微信公众号:
猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。