文件操作
foundation 框架中利用文件系统对文件进行操作。
基本操作是由NSFileManager类提供的,主要功能如下:
- 创建一个新文件
- 文件中读取数据
- 写入数据
- 文件的重命名
- 删除文件
- 测试文件是否存在
- 确定文件的大小以及其他属性
- 复制文件
- 测试两个文件是否相同
用NSFileHandle类,可以打开文件并对其进行读写操作。
- 打开文件,执行读写操作
- 在文件中查找指定位置
- 从文件中读取指定书目的字节,或写入指定数目的字节数据
- (NSData *)contentsAtPath:(NSString *)path; |
从一个文件中读取数据 |
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr; |
向文件中写入数据 |
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError |
删除文件 |
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error |
移动文件 |
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error |
复制文件 |
- (BOOL)contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2; |
比较两个文件内容是否相同 |
- (BOOL)fileExistsAtPath:(NSString *)path; |
文件是否存在 |
- (BOOL)isReadableFileAtPath:(NSString *)path; |
文件是否能够执行读操作 |
- (BOOL)isWritableFileAtPath:(NSString *)path; |
文件是否能执行写操作 |
- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError |
获取文件的属性 |
- (BOOL)setAttributes:(NSDictionary *)attributes ofItemAtPath:(NSString *)path error:(NSError **)error |
设置文件属性 |
每个路径都是NSString对象。
~用作用户主目录的缩写。
. 表示当前目录
..表示父目录
NSFileManager 类的创建
<span style="font-family:Comic Sans MS;font-size:14px;">NSFileManager *fm = [NSFileManager defaultManager]; </span>
NSData类
操作文件时需要频繁的将数据读入一个缓存区,NSData类来创建设置缓存区。
常见的NSFileManager目录方法
@property (readonly, |
获取当前目录 |
- (BOOL)changeCurrentDirectoryPath:(NSString *)path; |
更改当前目录 |
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error |
复制文件 |
- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error |
创建一个目录并设置属性 |
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory; |
测试路径是否问目录 |
- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error |
列出目录内容 |
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error |
删除目录 |
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString |
移动或重命名目录 |
- (NSDirectoryEnumerator *)enumeratorAtPath:(NSString *)path; |
枚举目录内容,如果还是目录会继续深入 |
使用路径:NSPathUtilities.h
NSPathUtilities.h包含了NSString的函数的分类扩展,它能够操作路径名。应该尽可能的使用这些函数。
常用的路径工具方法
+ (NSString *)pathWithComponents:(NSArray *)components; |
根据组件中的元素构造路径 |
@property (readonly, copy) NSArray *pathComponents; |
析构路径,获得组成此路径的各个部分 |
@property (readonly, copy) NSString *lastPathComponent; |
获取路径的最后一个组成部分 |
@property (readonly, copy) NSString *pathExtension; |
从组件最后部分获取扩展名 |
- (NSString *)stringByAppendingPathComponent:(NSString *)str; |
将str添加到现有路径的末尾 |
- (NSString *)stringByAppendingPathExtension:(NSString *)str; |
将扩展名添加到末尾 |
@property (readonly, copy) NSString *stringByDeletingLastPathComponent; |
删除最后组成部分 |
@property (readonly, copy) NSString *stringByDeletingPathExtension; |
删除最后部分的扩展名 |
@property (readonly, copy) NSString *stringByExpandingTildeInPath; |
将字符串中的带字符扩展为主目录(~) |
@property (readonly, copy) NSString *stringByResolvingSymlinksInPath; |
解析路径中的符号链接 |
@property (readonly, copy) NSString *stringByStandardizingPath; |
通过尝试解~ . .. 和符号链接来标准化路径 |
使用NSProcessInfo类
NSProcessInfo类中包含一些方法,允许你设置或检索正在运行的应用程序(即进程)的各种类型的信息
NSProcessInfo类方法
+ (NSProcessInfo *)processInfo; |
返回当前线程的信息 |
@property (readonly, copy) NSArray *arguments; |
以string对象数字的形式返回当前进程的参数 |
@property (readonly, copy) NSDictionary *environment; |
返回字典,描述当前环境变量 |
@property (readonly) int processIdentifier; |
返回进程表示符,它是操作系统赋予进程的唯一数字 |
@property (readonly, copy) NSString *globallyUniqueString; |
每次调用这个方法时,返回不同的单值字符串。可用这个字符串生成单值临时文件名 |
@property (readonly, copy) NSString *hostName; |
返回主机系统的名称 |
- (NSUInteger)operatingSystem |
返回表示操作系统的数字 |
- (NSString *)operatingSystemName |
返回操作系统的名称 |
@property (readonly, copy) NSString *operatingSystemVersionString; |
返回操作系统的当前版本 |
@property (copy) NSString *processName; |
将当前进程名称设置为name |
基本的文件操作NSFileHandle
使用NSFileHandle类提供的方法,允许更有效地使用文件。
处理文件时经历三个步骤:
- 打开文件,并获取一个NSFileHandle对象,以便在后面的i/o操作中引用该文件。
- 对文件执行i/o操作。
- 关闭文件
常用的NSFileHandle方法
+ (instancetype)fileHandleForReadingAtPath:(NSString *)path; |
打开一个文件准备读取 |
+ (instancetype)fileHandleForWritingAtPath:(NSString *)path; |
打开一个文件准备写入 |
+ (instancetype)fileHandleForUpdatingAtPath:(NSString *)path; |
打开一个文件准备更新(读写) |
@property (readonly, copy) NSData *availableData; |
从设备或者通道返回可用的数据 |
- (NSData *)readDataToEndOfFile; |
读取其余的数据直到文件末尾 |
- (NSData *)readDataOfLength:(NSUInteger)length; |
从文件中读取指定bytes的内容 |
- (void)writeData:(NSData *)data; |
将data写入文件 |
@property (readonly) unsigned long long offsetInFile; |
获取当前文件的偏移量 |
- (void)seekToFileOffset:(unsigned long long)offset; |
设置当前文件的偏移量 |
- (unsigned long long)seekToEndOfFile; |
将当前文件的偏移量定位到文件的末尾 |
- (void)truncateFileAtOffset:(unsigned long long)offset; |
将文件的长度设置为offset字节 |
- (void)closeFile; |
关闭文件 |
内容来自于《objective-cheng