如何知道文件正在通过 NSFileManager 写入
How to know a file is writing via NSFileManager
我遇到了一个问题,如何知道文件是否可以访问???
例如,文件正在写入,但尚未完成。
然后我再次检查文件,
我用
[[NSFileManager defaultManager] fileExistsAtPath:filePath];
它 return 正确...但是文件不可访问。
如何判断文件准备好了?
谢谢
韦伯
编辑
也许我没有把我的问题说清楚。我的意思是如果您开始传输视频文件。在运输完成之前。视频文件无法访问,但您仍然可以获得传输文件的一部分。
NSFileCoordinator and NSFilePresenter are created just for that. You may find interesting Advanced iCloud Document Storage video from wwdc that covers the usage of this classes. Building a Document-based App 也很值得一看。
尝试使用以下代码获取文件数据:
NSURL *url = [NSURL fileURLWithPath:filePath];
NSData *readData = [NSData dataWithContentsOfURL:url];
使用GCD概念以异步方式写入数据,一旦完成,将执行完成处理程序。(应检测写入过程的完成)
分派I/O 便利API 允许您对文件描述符执行异步读写操作。 API 支持基于流的语义来访问文件描述符的内容。
方法:
void dispatch_write ( dispatch_fd_t fd, dispatch_data_t data, dispatch_queue_t queue, void (^handler)(dispatch_data_t data, int error) );
基本上您需要检查文件的属性,特别是 NSFileBusy
属性:
if ([fileManager fileExistsAtPath:filePath]) {
NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil];
NSLog(@"File Busy %@", [attributes objectForKey:NSFileBusy]);
}
我遇到了一个问题,如何知道文件是否可以访问???
例如,文件正在写入,但尚未完成。 然后我再次检查文件,
我用
[[NSFileManager defaultManager] fileExistsAtPath:filePath];
它 return 正确...但是文件不可访问。
如何判断文件准备好了?
谢谢
韦伯
编辑 也许我没有把我的问题说清楚。我的意思是如果您开始传输视频文件。在运输完成之前。视频文件无法访问,但您仍然可以获得传输文件的一部分。
NSFileCoordinator and NSFilePresenter are created just for that. You may find interesting Advanced iCloud Document Storage video from wwdc that covers the usage of this classes. Building a Document-based App 也很值得一看。
尝试使用以下代码获取文件数据:
NSURL *url = [NSURL fileURLWithPath:filePath];
NSData *readData = [NSData dataWithContentsOfURL:url];
使用GCD概念以异步方式写入数据,一旦完成,将执行完成处理程序。(应检测写入过程的完成)
分派I/O 便利API 允许您对文件描述符执行异步读写操作。 API 支持基于流的语义来访问文件描述符的内容。
方法:
void dispatch_write ( dispatch_fd_t fd, dispatch_data_t data, dispatch_queue_t queue, void (^handler)(dispatch_data_t data, int error) );
基本上您需要检查文件的属性,特别是 NSFileBusy
属性:
if ([fileManager fileExistsAtPath:filePath]) {
NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil];
NSLog(@"File Busy %@", [attributes objectForKey:NSFileBusy]);
}