NSFileHandle、NSFileManager、NSData
2012-09-03 19:48
232 查看
NSFileHandle类是一个针对文件描述符的面向对象封装类。可以使用文件处理对象来访问与文件、sockets、管道pipes和设备相联系的数据。
对于文件,你可以在文件中读、写、查找。对于套接字sockets、pipes和devices,可以使用处理对象来异步监视设备和进程数据。
大部分NSFileHandle类的创建方法都能使文件处理对象获得相关联的文件描述符的所有权。这意味着文件处理对象既负责创建文件描述符也必须负责之后关闭文件,但关闭文件通常发生在文件处理对象销毁时。如果你想使用一个通过你创建的文件描述符对应的文件处理对象,可使用initWithFileDescriptor:和initWithFileDescriptor:closeOnDealloc:方法来创建一个File Handle。注意,在调用initWithFileDescriptor:closeOnDealloc:方法创建一个File Handle时,closeOnDealloc:的参数必须为NO。
运行回路考虑:
当你使用一个文件处理对象与套接字进行异步通信时,你必须在有效的运行回路(an active run loop)的线程中初始化相应的操作。尽管在线程的后台异步运行读、写、等待操作,但文件处理使用了一个运行回路源来监视这些操作并且准确的通知到你的代码。因此,你必须在你的应用主线程中,或者在你已经设置的一个运行回路的某个线程,调用这些方法,并且使用它来处理事件。
可以通过 NSFileManager 类对文件或目录执行基本操作。下面的大部分操作有对应的 URL 版本。
这里涉及到了 NSData 类,它可以用来设置缓冲区。它是不可变的,对应的有可变的 NSMutableData 。
下面是一些 NSData 类的方法。
下面是 NSMutableData 增加的一些方法。
还有一些用于文件路径管理的全局函数。
NSString 类也包含一些用于路径和URL处理的方法。
文件的读写使用 NSFileHandle 类的方法来完成。
对于文件,你可以在文件中读、写、查找。对于套接字sockets、pipes和devices,可以使用处理对象来异步监视设备和进程数据。
大部分NSFileHandle类的创建方法都能使文件处理对象获得相关联的文件描述符的所有权。这意味着文件处理对象既负责创建文件描述符也必须负责之后关闭文件,但关闭文件通常发生在文件处理对象销毁时。如果你想使用一个通过你创建的文件描述符对应的文件处理对象,可使用initWithFileDescriptor:和initWithFileDescriptor:closeOnDealloc:方法来创建一个File Handle。注意,在调用initWithFileDescriptor:closeOnDealloc:方法创建一个File Handle时,closeOnDealloc:的参数必须为NO。
运行回路考虑:
当你使用一个文件处理对象与套接字进行异步通信时,你必须在有效的运行回路(an active run loop)的线程中初始化相应的操作。尽管在线程的后台异步运行读、写、等待操作,但文件处理使用了一个运行回路源来监视这些操作并且准确的通知到你的代码。因此,你必须在你的应用主线程中,或者在你已经设置的一个运行回路的某个线程,调用这些方法,并且使用它来处理事件。
可以通过 NSFileManager 类对文件或目录执行基本操作。下面的大部分操作有对应的 URL 版本。
// 创建文件管理器 + (NSFileManager *)defaultManager // 查看目录 - (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error - (NSDirectoryEnumerator *)enumeratorAtPath:(NSString *)path // 创建/删除项 - (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error - (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)contents attributes:(NSDictionary *)attributes - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error // 复制/移动项 - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error // 创建符号链接和硬链接 - (BOOL)createSymbolicLinkAtPath:(NSString *)path withDestinationPath:(NSString *)destPath error:(NSError **)error - (BOOL)linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error - (NSString *)destinationOfSymbolicLinkAtPath:(NSString *)path error:(NSError **)error // 检测文件 - (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory // 取得/设置属性 - (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error - (BOOL)setAttributes:(NSDictionary *)attributes ofItemAtPath:(NSString *)path error:(NSError **)error // 取得/比较文件内容 - (NSData *)contentsAtPath:(NSString *)path - (BOOL)contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2 // 将文件路径转换为字符串 - (const char *)fileSystemRepresentationWithPath:(NSString *)path - (NSString *)stringWithFileSystemRepresentation:(const char *)string length:(NSUInteger)len // 取得/更改当前目录 - (NSString *)currentDirectoryPath - (BOOL)changeCurrentDirectoryPath:(NSString *)path
这里涉及到了 NSData 类,它可以用来设置缓冲区。它是不可变的,对应的有可变的 NSMutableData 。
下面是一些 NSData 类的方法。
// 创建和初始化缓冲区,有对应的initWith版本 + (id)dataWithBytes:(const void *)bytes length:(NSUInteger)length + (id)dataWithContentsOfFile:(NSString *)path + (id)dataWithContentsOfURL:(NSURL *)aURL + (id)dataWithData:(NSData *)aData // 取得数据 - (const void *)bytes - (void)getBytes:(void *)buffer length:(NSUInteger)length - (void)getBytes:(void *)buffer range:(NSRange)range // 取得长度 - (NSUInteger)length // 比较数据 - (BOOL)isEqualToData:(NSData *)otherData // 存储数据 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag - (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr - (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)atomically - (BOOL)writeToURL:(NSURL *)aURL options:(NSDataWritingOptions)mask error:(NSError **)errorPtr
下面是 NSMutableData 增加的一些方法。
// 创建一定大小的空的/初始化为0的可变缓冲区,有对应的initWith版本 + (id)dataWithCapacity:(NSUInteger)aNumItems + (id)dataWithLength:(NSUInteger)length // 更改容量 - (void)setLength:(NSUInteger)length // 取得数据 - (void *)mutableBytes // 增加数据 - (void)appendBytes:(const void *)bytes length:(NSUInteger)length - (void)appendData:(NSData *)otherData // 修改数据:替换、重置0、重设 - (void)replaceBytesInRange:(NSRange)range withBytes:(const void *)bytes - (void)resetBytesInRange:(NSRange)range - (void)setData:(NSData *)aData
还有一些用于文件路径管理的全局函数。
// 返回当前用户的登录名/全名 NSString *NSUserName(void); NSString *NSFullUserName(void); // 返回用户的主目录 NSString *NSHomeDirectory(void); NSString *NSHomeDirectoryForUser(NSString *userName); // 返回临时文件目录 NSString *NSTemporaryDirectory(void);
NSString 类也包含一些用于路径和URL处理的方法。
文件的读写使用 NSFileHandle 类的方法来完成。
// 打开文件准备读取/写入/更新 + (id)fileHandleForReadingAtPath:(NSString *)path + (id)fileHandleForWritingAtPath:(NSString *)path + (id)fileHandleForUpdatingAtPath:(NSString *)path // 打开标准输入/标准输出/标准错误/空设备 + (id)fileHandleWithStandardInput + (id)fileHandleWithStandardOutput + (id)fileHandleWithStandardError + (id)fileHandleWithNullDevice // 初始化文件处理对象 - (id)initWithFileDescriptor:(int)fileDescriptor // 返回文件描述符 - (int)fileDescriptor // 读写数据 - (NSData *)availableData - (NSData *)readDataToEndOfFile - (NSData *)readDataOfLength:(NSUInteger)length - (void)writeData:(NSData *)data // 文件定位 - (unsigned long long)offsetInFile - (unsigned long long)seekToEndOfFile - (void)seekToFileOffset:(unsigned long long)offset // 扩展或截断文件 - (void)truncateFileAtOffset:(unsigned long long)offset // 同步文件 - (void)synchronizeFile // 关闭文件 - (void)closeFile
相关文章推荐
- 【OC学习-23】NSFileManager、NSFileHandle、NSData的注意事项和常用操作归纳
- 【iOS】第03讲 文件读写/NSArray/NSData/NSFileManager/NSFileHandle
- IOS学习之IOS沙盒(sandbox)机制和文件操作之NSFileManager(三)
- iOS SDK详解之NSFileManager
- IPhone之NSFileManager的使用
- iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager(三)
- IOS学习之IOS沙盒(sandbox)机制和文件操作之NSFileManager(三)
- iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager(三)
- iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager(三)
- 捷径系列:NSFileManager
- OC关于NSFileManager的再详解
- 黑马程序员---OC学习笔记之NSFileManager介绍和用法
- NSFileHandle、NSFileMange
- iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager(三)
- IOS文件操作的两种方式:NSFileManager操作和流操作
- iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager(三)
- UIday1801:沙盒三个文件的路径的获取、简单与复杂对象的读写、NSUserDefaults、NSFileManager
- iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager
- iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager(三)
- iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager(三)