2011-12-16 1 views
1

FileHandleクラスには、fileHandleWithStandardOutputメソッドがあります。 Documentationによれば、「これは、従来、プログラムからデータストリームを受信する端末装置である」という。目的C FileHandleのファイルHandleWithStandardOutput

私がしたいことは、128バイトごとのファイルを読み込み、fileHandleWithStandardOutputメソッドを使用して端末に表示することです。

ここでは、128バイトごとにどのように読んでいるのかを示すコード断片です。

kBufSizeは128に等しいプリプロセッサです。


私の答え:fileHandleWithStandardOutputのリターンNSFileHandleてoutFile

設定...それはworked..andなかったbefore..but

が、私はそれを試してみましたが、今では働いていました。他に何かがあるか、何かが干渉している可能性があります。とにかく私は今答えを得ました。

答えて

2

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

WOW !!!あなたのコードは私よりもWAAAAYYYYです。非常に素晴らしい!ありがとうございました! – jovhenni19

+1

johvenni19が128バイトのチャンクを読む必要がある理由を教えてください:Stephen Kochanの本を使ってObjective-Cを学ぶ。私は今も同じことをやっています、あなたのコードは動作します。それはあまりにも悪いですが、AppleはSDKのMicrosoftのようなコードサンプルを提供していません。 – Eugene

+0

@Eugene私は同意します。 Appleのドキュメントは "うまい"ですが、サンプルはありません.Appleの "公式"ドキュメント(これはあなたが知っていることは知っていますが、他の場所にはサンプル、つまり@StackOverflowなどがあります) t **はサンプルを含む)。一息。 –

0

あなたは、単に行うことによって、あなたの目的を達成することができます

while ((buffer = [inFile readDataOfLength:kBuffSize]).length !=0){ 
    [standardOutPut writeData:buffer]; 
}