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

How to read file from last cursor position?

本文关键字:位置 读取 文件 光标 最后一个      更新时间:2023-10-16
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字节。然后我想从 100 开始阅读。字节到 200。字节。。。直到文件结束。我做的是真的吗?

我认为myfile是一个istream

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

  • 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!

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

有关

更多详细信息,请查看有关堆栈溢出的相关问题。

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

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