使用文件
Foundation框架允许你利用文件对文件或目录执行基本操作。这些基本操作是由NSFileManager类提供。
一、管理文件和目录:NSFileManager
1、NSFileManager类:
1>、简介:对于NSFileManager类,文件或目录是使用文件路径名唯一的标识。每个路径名都是一个NSString对象,它既可以是相对路径名,也可以是完全路径名。
2>、NSFileManager类的功能:
- 创建一个新文件
- 从现有文件读取数据
- 将数据写入
- 重命名文件
- 删除文件
- 测试文件是否存在
- 确定文件的大小及其他属性
- 复制文件
- 测试两个文件的内容是不相同
- 注:上述多数操作也可以直接对目录进行,另一个重要特性就是链接文件的能力。
3>、创建NSFileManager对象:通过向类发送一条defaultManager消息创建,如:
NSFileManager *fm;
fm = [NSFileManager defaultManager];
4>、属性字典:属性字典包括各种信息,如文件的所有者、文件大小、文件的创建日期等。属性字典还允许指定要创建的文件的权限,以便获取或者更改现有文件的信息。
5>、常用的NSFileManager方法:
1)、-(BOOL)contentsAtPath:path 从一个文件中读取数据
2)、-(BOOL)creatsFileAtPath:path contents:(BOOL) data attributs: attr 向一个文件写入数据
3)、-(BOOL)removeFileAtPath: path handler: handler 删除一个文件
4)、-(BOOL)fileExistsAtPath: path 测试文件是否存在
5)、-(BOOL)changeFileAttributes: attr atPath: path 更改文件属性
2、使用NSData类
1>、NSData类:Foundation的NSData类提供了一个简单的方式来设置缓冲区,将文件的内容读入缓冲区,或将缓冲区的内容写到一个文件。
2>、分类:可分为不变的缓冲区(使用NSData类)和可变的缓冲区(使用NSMutableData类)。
3>、使用方法,如:
int main (int argc, char *argv[])
{
NSAutoreleasepool *pool=[[NSAutoreleasepool alloc]init];
NSFileManager *fm;
NSData *fileData;
fm = [NSFileManager defaultManager];
fileData = [fm contentsAtPath: @”newfile2”];
if(fileData == nil) {
NSLog( @ ”File read failed: “ );
return 1;
}
[pool drain];
return 0;
}
3、使用目录
1>、NSFileManager类:NSFileManager类提供了处理目录的方法。
注:大多数方法和用于普通文件的方法相同
2>、常用目录方法:
1)、-(NSString *)currentDirectoryPath 获取当前目录
2)、-(BOOL)createDirectoryAtPath:path attributs: attr 创建一个新目录
3)、-(NSArray *)directoryContensAtPath: path 列出目录内容
4)、-(BOOL)removeFileAtPath: path handler: handler 删除空目录
4、枚举目录中的内容
1>、枚举方法:使用enumeratotAtPath: 方法或者directoryContentsAtPath: 方法,都可以完成枚举过程。
2>、enumeratorAtPath: 方法,一次可以枚举指定目录中的每个文件,默认情况下,如果其中一个文件本身为目录,那么也会递归枚举它的内容。
注:可通过向枚举对象发送一条skipDescendant消息,可以动态地阻止递归过程,从而不再枚举目录中的内容。
3>、directoryContentsAtPath: 方法,可以枚举指定目录的内容,并在一个数组中返回文件列表。如果这个目录中的任何文件本身是个目录,这个方法并不递归枚举它的内容。
4>示例程序代码
int main(int argc, char *argv[])
{
NSAutoreleasepool *pool = [[NSAutoreleasepool alloc] inti];
NSString *path;
NSFileManager *fm;
NSDirectoryEnumerator *dirEnum;
NSArray *dirArray;
fm = [NSFileManager defaultManager];
path = [fm currentDirectoryPath];
dirEnum = [fm enumeratorAtPath: path];
NSLog( @ “Contents of %@ : “,path];
While((path = [dirEnum nextObject) !=nil)
NSLog( @ “ %@ “ , path);
dirArray = [fm directoryContentsAtPath: [fm currentDirectoryPath ]];
NSLog( @ “ %@ “ ,path);
[pool drain];
return 0;
}
二、使用路径:NSPathUtilities.h
1、路径操作:
NSPathUtilities.h包含了NSString的函数和分类扩展,它允许你操作路径名。应该尽可能地使用这些函数,以便使程序更能独立于文件系统结构以及特定文件和目录的位置。
2、路径名:
路径名分为相对路径名和完全路径名。相对路径名是相对于当前目录的路径名;完全路径名也称为绝对路径名,以斜线 / 开始。斜线实际上就是一个目录,称为根目录。这个特殊的代字符(~)用作用户主目录的缩写。
3、路径获取:
可使用方法和函数来获取当前目录的路径名、用户的主上当以及用来创建临时文件的目录。
注:在程序中,应尽量避免使用硬编码的路径名。
4、常用方法如下:
1)、+(NSString *)pathWithComponents: components 根据components中的元素构造有效路径
2)、-(NSArray *)pathComponents 析构路径,获得组成此路径的各个地方
3)、-(NSString *)lastPathComponent 提取路径的最后一个组成部分
3)、-(NSString *)stringByDeletingLastPathComponent 删除路径的最后一个组成部分
5、复制文件和使用NSProcessInfo类
1>、命令行工具命令:
Copy from-file tofile
与NSFileManager的copyPath: toPath: handler: 方法不同命令行工具允许to-file是目录名,并允许重写其内容。
2>、NSProcessInfo类:NSProcessInfo类中包含一些方法,他们允许你设置或检索正在运行的应用程序(即进程)的各种信息。
3>、NSProcessInfo类常用方法:
1)、+(NSProcessInfo *)processInfo 返回当前进程信息
2)、-(NSArray *)arguments 以NSString对象数字的形式返回当前进程参数
3)、-(NSString *)processName 返回当前正在执行的进程名称
三、基本文件操作:NSFielHandle
1、NSFileHandle类:
NSFIleHandle类提供的方法,允许更有效地使用文件。可以打开文件,并对其执行多次读写操作。
2、NSFileHandle类的功能如下:
- 打开一个文件,执行读、写或更新(读写)操作。
- 在文件中查找指定位置。
- 从文件中读取特定数目的字节,或将特定数目的字节写入文件中。
3、处理文件一般步骤:
1>、打开文件,并获取一个NSFileHandle对象,以便后面的I/O操作中引用该文件。
2>、对打开的文件执行I/O。
3>、关闭文件。
4、NSFileHandle常用方法
1)、+(NSFileHandle *)fileHandleForReadingAtPath: path 打开一个文件准备读取
2)、+(NSFileHandle *)fileHandleForWritingAtPath: path 打开一个文件准备写入
3)、+(NSFileHandle *)fileHandleForUpdatingAtPath: path 打开一个文件准备更新
4)、-(NSData *)availableData 从设备或者通道返回可用的数据
5、NSFileHandle标准输入、输出、错误和空设备方法。
格式为:fileHandleWithDevice,其中Device可以是StandardInput、StandardOuput、StandardError或NullDevice。
注:FileHandle类没有创建文件的功能,必须使用FileManager方法来创建文件。