Цель C FileHandle's fileHandleWithStandardOutput - PullRequest
1 голос
/ 16 декабря 2011

В классе FileHandle есть метод fileHandleWithStandardOutput.Согласно Документации «Традиционно это терминальное устройство, которое получает поток данных от программы».

Что я хочу сделать, это прочитать файл на 128 байтов и отобразить егона терминал, используя метод fileHandleWithStandardOutput.

Вот фрагмент кода того, как я читаю его на 128 байтов.

i = 0;
while((i + kBufSize) <= sourceFileSize){
        [inFile seekToFileOffset: i];
        buffer = [inFile readDataOfLength: kBufSize];
        [outFile seekToEndOfFile];
        [outFile writeData: buffer];
        i += kBufSize + 1;        
    }

//Get the remaining bytes...
[inFile seekToFileOffset: i ];

buffer = [inFile readDataOfLength: ([[attr objectForKey: NSFileSize]intValue] - i)];
[outFile seekToEndOfFile];
[outFile writeData: buffer];

kBufSize - это препроцессор, равный 128;


Мой ответ:

SetFile Возвращает NSFileHandle fileHandleWithStandardOutput ..

Я пробовал это раньше ... но это не сработало ... и теперь это сработало.Может быть, есть что-то еще или что-то мешает.В любом случае, я получил ответ сейчас.

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Вам не нужно искать каждый раз, когда вы читаете или пишете в FileHandle.Ваш код может быть упрощен следующим образом:

NSData *buffer;

NSFileHandle *outFile = [NSFileHandle fileHandleWithStandardOutput];

do {
    buffer = [inFile readDataOfLength: kBufSize];
    [outFile writeData:buffer];
} while ([buffer length] > 0);

Я не уверен, почему вы читаете 128-битные блоки, но если это не нужно, вы можете устранить цикл и сделать что-то подобноевместо этого (при условии, что ваш входной файл не такой большой, он превышает максимум для объекта NSData):

NSFileHandle *outFile = [NSFileHandle fileHandleWithStandardOutput];
buffer = [inFile readDataToEndOfFile];
[outFile writeData:buffer];
0 голосов
/ 28 мая 2014

Вы можете просто достичь своей цели, выполнив:

while ( ( buffer = [inFile readDataOfLength:kBuffSize] ).length !=0 ){
    [standardOutPut writeData:buffer];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...