您的位置:首页 > 其它

Reading the bytes from a text file using a dispatch I/O channel

2014-08-28 14:42 423 查看
- (void)readContentsOfFile:(NSURL*)anURL {
// Open the channel for reading.
NSString*   filePath = [anURL path];
self.channel = dispatch_io_create_with_path(DISPATCH_IO_RANDOM,
                      // Convert to C-string
// Open for reading
// No extra flags
dispatch_release(self.channel);
self.channel = nil;
}
[filePath UTF8String],
O_RDONLY,
0,
dispatch_get_main_queue(),
^(int error){
// Cleanup code
if (error == 0) {
});
// If the file channel could not be created, just abort.
if (!self.channel)
return;
// Get the file size.
NSNumber* theSize;
NSInteger fileSize = 0;
if ([anURL getResourceValue:&theSize forKey:NSURLFileSizeKey error:nil])
fileSize = [theSize integerValue];
// Break the file into 1024 size strings.
size_t chunkSize = 1024;
off_t  currentOffset = 0;
for (currentOffset = 0; currentOffset < fileSize; currentOffset += chunkSize)
{
dispatch_io_read(self.channel, currentOffset, chunkSize,
dispatch_get_main_queue(),
^(bool done, dispatch_data_t data, int error){
if (error)
return;
// Build strings from the data.
dispatch_data_apply(data,
(dispatch_data_applier_t)^(dispatch_data_t region,
 size_t size){
init];
initWithBytes:buffer
size_t offset, const void *buffer,
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc]
NSString* aString = [[[NSString alloc]
length:size encoding:NSUTF8StringEncoding]
[self addString:aString toFile:anURL]; // Custom method. [pool release];
return true; // Keep processing if there is more data. });
});
autorelease];
} }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐