#include<iostream>
#include<fstream>
#define BUFFER_SIZE 11788889
using namespace std;
int main()
{
ifstream infile("hello.txt");
unsigned char buffer[BUFFER_SIZE];
int read_file_position=infile.tellg();
cout<<"input file position"<<read_file_position<<endl;
while(infile.read((char *)buffer,BUFFER_SIZE))
{
read_file_position=infile.tellg();
cout<<"input file position"<<read_file_position<<endl;
}
}
我尝试将我的文件分割成大块的字节..分成MB或GB会很棒..如果有一种方法可以将它分成更大的块,那将会有所帮助..因为我的记录没有一个固定的长度,所以块大小会有所不同。
答案 0 :(得分:0)
是的,但由于我有一个更大的文件,我不想把它写到另一个文件并浪费时间......
我有这样的记录..
ID:1002:: TP://reports/timing_report1.txt::TPS:counter/ffa::TPE: counter/ffd:: PGR: CLK::PTY:max::SL:-0.48::LAY:M2:: SEL::SLLT:1.0:: PTY:ANY::LAY:M1&M2:: PRG:ANY:: CELL:ANY:: REG:ANY
ID:1003:: TP://reports/timing_report1.txt::TPS:counter/ffb::TPE: counter/ffc:: PGR:CLK:: PTY:max::SL:-0.3::LAY:M1:: SEL::SLLT:1.0:: PTY:ANY::LAY: M1&M2:: PRG:ANY:: CELL:ANY:: REG:ANY
现在如果我想分块...我不希望一个块包含一半的记录..所以我想要一个块来获得完整的记录......如果我分成两半,那么我就不要我希望记录被分成两半。所以我需要搜索下一次出现的ID,并在该块中的下一个ID中添加前一个块n中的前一半
答案 1 :(得分:0)
如果您想通过块读取数据而不是将块传递给多个线程,请执行以下操作
void *pManyChunks = malloc( NUM_THREADS * sizeof(YourRecord) );
while( not end of file )
{
read sizeof(YourRecord)*NUM_THREADS bytes to pManuChunks
pass (YourRecord*)((char*)pManuChunks + sizeof(YourThread)*0) pointer and sizeof(YourRecord) to first thread
pass (YourRecord*)((char*)pManuChunks + sizeof(YourThread)*1) and sizeof(YourRecord) to second thread
pass (YourRecord*)((char*)pManuChunks + sizeof(YourThread)*2) and sizeof(YourRecord) to third thread
etc
}