0
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. byte 读取到 200. byte ... 直到文件结束。我在做什么是真的吗?

4

2 回答 2

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

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

于 2013-07-31T11:54:25.787 回答
0

我假设myfile是一个istream.

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

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

你应该尝试这样的事情:

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它来确定它的实际大小(例如)。

有关更多详细信息,请查看Stack Overflow 上的相关问题

于 2013-07-31T11:54:36.903 回答