您的位置:首页 > 其它

【OC学习-23】NSFileManager、NSFileHandle、NSData的注意事项和常用操作归纳

2014-09-07 10:06 555 查看
(1)用一个例子看文件管理器以及获取文件属性,其中文件大小以及修改日期属性比较重要。我们需要了解这些属性,这样在操作文件属性的时候可以直接调用。比如用[dic1 objectForKey:NSFileSize]属性来输出文件的大小。

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

@autoreleasepool {
//获取文件管理器
NSFileManager *file1=[NSFileManager defaultManager];
//我们利用桌面上的一个文件来看看文件属性
NSString *path=@"/Users/Andy/Desktop/economist.pdf";
//文件属性返回的是一个字典,所以用一个字典去接
NSError *error1;
NSDictionary *dic1=[file1 attributesOfItemAtPath:path error:&error1];
//如果成功,则忽略错误,如果失败则把失败信息写入error里面,所以有如下判断
if (error1!=nil) {
NSLog(@"WRONG");
}else{
NSLog(@"%@",dic1);
}
}
return 0;
}部分输出结果:
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 20;
NSFileGroupOwnerAccountName = staff;
NSFileHFSCreatorCode = 0;
NSFileHFSTypeCode = 0;
NSFileModificationDate = "2014-08-30 08:57:51 +0000";
NSFileOwnerAccountID = 501;
NSFileOwnerAccountName = Andy;
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 49847196;
NSFileSystemFileNumber = 1116354;
NSFileSystemNumber = 16777217;
NSFileType = NSFileTypeRegular;
说明:

a:NSFileHandle只能打开现成的文件,所以如果是新文件则需要NSFileManager先创建新文件;

b:打开一个文件就后,就需要关闭一个文件;

c:根据不同的要求可能要设定不同的偏移量(即光标所在位置),可以通过移动到开头或结尾,也可以先获取当前位置然后增加和减少多少字节来移动;

d:文件路径是NSString对象,可以用stringByAppendingPathComponent+文件全称方法构造一个完整的文件路径;

e:往文件里面写的内容是NSData,如果是其他的格式则可以用dataUsingEncoding:NSUTF8StringEncoding来转化成data类型;

f:同样,目录的写法于Linux类似,~家目录,/根目录,.当前目录,..父目录,用/表示层级等。

g:NSFileManager可以管理文件,但是很细致的比如读取文件里部分数据这些需要用NSFileHandle。

(2)获取一个路径下所有文件以及子目录列表

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

@autoreleasepool {
//获取文件管理器
NSFileManager *file1=[NSFileManager defaultManager];
//比如桌面上又一个img文件夹
NSString *path=@"/Users/Andy/Desktop/img";
NSError *error2;
//是一个数组,但只能获取第一级的子目录
NSArray *arr1=[file1 contentsOfDirectoryAtPath:path error:&error2];
NSLog(@"%@",arr1);
//能够获取所有层级的子目录
NSArray *arr2=[file1 subpathsOfDirectoryAtPath:path error:&error2];
NSLog(@"%@",arr2);
}
return 0;
}

(3)目录管理(创建、拷贝、剪切、删除等)
int main(int argc, const char * argv[]) {

@autoreleasepool {
//获取文件管理器
NSFileManager *file1=[NSFileManager defaultManager];
//创建目录(文件夹)
NSString *path=@"/Users/Andy/Desktop/hello/aaa";
NSError *err1;
//当withIntermediateDirectories为YES时可以创建多层级目录,而如果是NO只能创建1级目录,后面的层级不能够被创建
[file1 createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&err1];
//移动目录,相当于剪切。伪剪切,因为不能剪切到已存在的目录里面,其实相当于重命名文件一样
NSString *pathSrc=@"/Users/Andy/Desktop/hello";
NSString *pathTo=@"/Users/Andy/Desktop/newhello";
[file1 moveItemAtPath:pathSrc toPath:pathTo error:&err1];
//拷贝文件,伪拷贝,因为不能拷贝到已存在的目录里面,其实相当于重新创建一个新的文件夹
[file1 copyItemAtPath:pathSrc toPath:pathTo error:&err1];
//删除目录
[file1 removeItemAtPath:pathTo error:&err1];
}
return 0;
}

(4)文件管理(创建、复制、删除等)
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

@autoreleasepool {
//获取文件需要用NSData二进制文件存储,类似于把文件打散成二进制的存起来,然后把这个文件写到其他地方去
//data里面的大小就是文件的大小
NSString *path1=@"/Users/Andy/Desktop/economist.pdf";
NSData *data1=[NSData dataWithContentsOfFile:path1];
NSLog(@"%lu",(unsigned long)data1.length);

//创建一个文件。文件的内容需要data类型,所以需要用到像上面那样先由一个data数据,如有其他类型,也许转化成data类型
NSFileManager *file1=[NSFileManager defaultManager];
NSString *path2=@"/Users/Andy/Desktop/newfile.pdf";
[file1 createFileAtPath:path2 contents:data1 attributes:nil];

//移动文件,注意的是需要把文件的完整路径写出来,包括文件名
NSString *path3=@"/Users/Andy/Desktop/newhello/economist.pdf";
NSError *err1;
[file1 moveItemAtPath:path1 toPath:path3 error:&err1];

//删除文件
[file1 removeItemAtPath:path1 error:&err1];
}
return 0;
}

(5)NSData
我们可以利用writeToFile把一个字符串写入到文件中,我们data对象也能调用这个方法把数据写入到文件中。但是我们从文件中读取的素具都是NSData类型,所以需要用一个NSData数据接收。

NSData是不可变长度的,只能一次性全部加载数据。此时NSMutableData出场。

我们可以吧NSString类型转换成NSData类型,然后利用NSData的appendData方法逐个添加数据到这个NSMutableData中。

int main(int argc, const char * argv[]) {

@autoreleasepool {
//创建NSString
NSString *str1=@"hello";
NSString *str2=@"world";
//NSString转NSData
NSData *d1=[str1 dataUsingEncoding:NSUTF8StringEncoding];
NSData *d2=[str2 dataUsingEncoding:NSUTF8StringEncoding];
//创建一个NSMutableData数据
NSMutableData *muData1=[[NSMutableData alloc]init];
//添加data数据
[muData1 appendData:d1];
[muData1 appendData:d2];
//再把这个muData1写入到一个文件中,如文件不存在则创建后再写入
NSString *path0=@"/Users/Andy/Desktop/hello.txt";
[muData1 writeToFile:path0 atomically:YES];
}
return 0;
}
()NSFileHandle(详见:http://blog.csdn.net/enuola/article/details/7797055)



()NSFileManager(详见:http://www.cnblogs.com/jiangyuxuan/archive/2013/03/09/2950988.html)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: