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

- (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];
} }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值