-4

我有一个不寻常的问题。由于我前任的设计,我有一个 27 MB 的文件,我需要在其中找到一个特定的字节,比如第 100,000 个字节。然后我必须删除第 100,000 到 150,000 个字节之间的所有内容。

该文件分为头文件(以[END]大约 10,000 个字符后结尾)和实际数据(全部为字节形式)。2700 万字节被分隔在大约 15000 行中。

任何帮助将不胜感激。

4

2 回答 2

0

在您的情况下,一种解决方案(除非您对空间使用有严格限制)是将您的文件复制到另一个您不需要的跳过字节中。取决于您如何计算第 n 个字节,您可能需要以二进制模式打开文件。您可以重命名源文件以使用原始名称临时打开新文件,进行实际复制和删除源。或者您可以将内容复制到临时文件,然后删除原始文件并将临时文件重命名为原始名称。如果您对磁盘空间有限制,您可以存储剩余的文件(在您的示例中从第 150,000 个到末尾)将原始文件截断到第 100,000 个,然后将剩余的文件复制回来。

于 2013-10-16T18:32:18.850 回答
0

将文件 1 复制到文件以使用 seekg 跳过不需要的区域。

//open the files:
ifstream fin("filename.ext",ios::in|ios::binary);
ofstream fout("filename.ext",ios::out|ios::binary);

size_t position = ?? ;// position in file
size_t size = ??; //size you want to read

char buffer[BUFFSIZE];
//go to position:
fin.seekg(position);

//read from position 
while(size > 0){
  fin.read(buffer, MIN(size, BUFFSIZE));
  size_t count;
  fout.write(buffer, count);
  size -= count; 
}
于 2013-10-16T18:36:54.547 回答