Objective c 目标C文件句柄';s fileHandleWithStandardOutput

Objective c 目标C文件句柄';s fileHandleWithStandardOutput,objective-c,nsfilehandle,Objective C,Nsfilehandle,在FileHandle类中有一个fileHandleWithStandardOutput方法。根据本发明,“通常这是从程序接收数据流的终端设备。” 我要做的是使用fileHandleWithStandardOutput方法,每128字节读取一个文件,并将其显示到终端 这里有一段代码片段,说明我是如何每128字节读取一次的 i = 0; while((i + kBufSize) <= sourceFileSize){ [inFile seekToFileOffset: i];

FileHandle
类中有一个
fileHandleWithStandardOutput
方法。根据本发明,“通常这是从程序接收数据流的终端设备。”

我要做的是使用
fileHandleWithStandardOutput
方法,每128字节读取一个文件,并将其显示到终端

这里有一段代码片段,说明我是如何每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];
i=0;

而((i+kBufSize)您不需要每次读取或写入文件句柄时都进行查找。您的代码可以简化如下:

NSData *buffer;

NSFileHandle *outFile = [NSFileHandle fileHandleWithStandardOutput];

do {
    buffer = [inFile readDataOfLength: kBufSize];
    [outFile writeData:buffer];
} while ([buffer length] > 0);
我不知道为什么要读取128字节的数据块,但如果没有必要,那么可以消除循环,改为执行类似操作(假设输入文件不是太大,不会超过NSData对象的最大值):


您可以通过以下方式实现您的目标:

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

我会告诉你为什么johvenni19需要阅读128字节块:使用Stephen Kochan的书学习Objective-C。我现在也在做同样的事情,你的代码可以工作。可惜苹果没有像微软那样为他们的SDK提供代码示例。@Eugene我同意。苹果的文档“很好”…但没有样本…这会在寻找其他地方(可能也有样本的地方,即@StackOverflow)和/或仅仅使用苹果的“官方”文档(你知道这些文档不包括样本)之间产生永久的权衡。叹气。
while ( ( buffer = [inFile readDataOfLength:kBuffSize] ).length !=0 ){
    [standardOutPut writeData:buffer];
}