如何从最后一个光标位置读取文件?

时间:2013-07-31 11:38:58

标签: c++

char buf[100];
int bufSize = 100;
int lastPosition = 0;
while(!myfile.eof()){
myfile.read(buf,100);
myfile.seekg(lastPosition);
lastPosition = lastPosition + bufSize;
}

我尝试从myfile中读取100个字节并将光标位置设置为100. byte。然后我想从100.字节到200.字节读取...直到文件结束。我正在做的是真的吗?

2 个答案:

答案 0 :(得分:0)

int fileParts = 30;
int bufSize = 100;
char buf[fileParts}[bufSize];
int i = 0;
while(!myfile.eof() && i<fileParts){
      myfile.read(buf[i],100);
      ++i;
}

或者使用字节数组的向量而不是二维数组。

答案 1 :(得分:0)

我认为myfileistream

在这种情况下,这不完全是它的工作方式:

  • read()在阅读时移动文件指针,因此每次都不需要seek()
  • 您提供的循环作为示例,每次读取chunck时都会覆盖缓冲区,而不对其执行任何操作

你应该尝试这样的事情:

char buf[100];
int bufSize = 100;

while(!myfile.eof()){
    myfile.read(buf, bufSize);
    // do something with your chunck here.        
}    

或者像这样:

char * theWholeFile;
int pos = 0;
int chunckSize = 100; 

theWholeFile = new char[myfile.tellg()];

while(!myfile.eof()){
    myfile.read(theWholeFile + pos, chunckSize);
    pos += chunckSize; 
}    

// theWholeFile contains the whole file at that point. Don't forget to delete it at some point!

我没有在这里处理最后一个chunck。它的大小可以是0到100之间的任何值。您可以使用myfile.tellg() % chunckSize来确定其实际大小(例如)。

有关详细信息,请查看此related question on Stack Overflow