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