Чтение файла журнала из файла bz2 в target-c - PullRequest
1 голос
/ 04 января 2012

Я хотел бы прочитать содержимое файла журнала, который был повернут в файл bz2. Как я могу сделать это, используя как можно меньше памяти?

Ответы [ 2 ]

1 голос
/ 05 января 2012

Я только что понял, используя эти сценарии: http://www.cocoadev.com/index.pl?BzipValueTransformer & http://www.cocoadev.com/index.pl?NSDataPlusBzip

Что вам нужно сделать, это включить libbz2.a, который я нашел в /opt/local/lib/libbz2.a с тех пор, как я установил bzip2 с помощью macports. Я перетащил файл в свой проект и написал код:

- (void)bunzip
{
    NSString *path = @"/var/log/kernel.log.1.bz2";

    NSData *data = [NSData dataWithContentsOfFile:path];

    NSString *dataString = [[Bzip2ValueTransformer alloc] transformedValue:data];

    NSLog(@"Data: %@", dataString);
}

Результат:

Dec 16 23:26:58 Paul-Peelens-MacBook-Pro kernel[0]: wlEvent: en1 en1 Link UP
Dec 16 23:26:58 Paul-Peelens-MacBook-Pro kernel[0]: AirPort: Link Up on en1
Dec 16 23:26:58 Paul-Peelens-MacBook-Pro kernel[0]: en1: BSSID changed to 32:7b:98:82:9d:7f
Dec 16 23:30:10 paul-peelens-macbook-pro newsyslog[13862]: logfile turned over due to size>1000K
0 голосов
/ 05 января 2012

Я бы использовал NSTask или мой собственный PRHTask , чтобы открыть процесс bunzip2 со стандартным входом, подключенным к файлу bzip2, и стандартным выходом, установленным в канал.Используйте асинхронное чтение NSFileHandle или GCD dispatch_source для чтения из этого канала в фоновом режиме при поступлении данных.

...