gpt4 book ai didi

C++ 删除或覆盖文件中的现有信息

转载 作者:行者123 更新时间:2023-11-30 05:08:09 26 4
gpt4 key购买 nike

在 C++ 中有没有一种方法可以使用标准库来覆盖大文件中的二进制数据并保留文件中现有数据的其余部分,而无需首先加载整个文件?

示例:如果我有一个包含文本“ABC”的文件“MyFile”,并且想用“Q”替换“A”,有没有办法在不将“BC”加载到内存的情况下做到这一点?

我目前拥有的:

#include <fstream>

int main(int argc, char** argv)
{
std::fstream f;
f.open("MyFile",std::ios::in);
while (f.good())
{
char Current = f.get();
if (Current == 'A')
break;
}
int Location = f.gcount()-1;
f.close();

if (Location < 0)
{
printf("Nothing to do.\n");
return EXIT_SUCCESS;
}
else
{
f.open("MyFile",std::ios::in | std::ios::out);
f.seekp(Location);
f.write("Q",1);
//f.put('Q');
//f << "Q";
f.close();
return EXIT_SUCCESS;
}
}

这似乎现在有效 - 谢谢大家。

最佳答案

std::ios::in | 打开你的文件std::ios::out,然后当您找到“A”的位置时,使用 f.seekg(Location); 将“输入插入符号”移回该位置,然后写入文件。

请记住,您只能替换/覆盖。您不能附加到文件的中间。

这应该有效:

#include <fstream>
#include <iostream>

int main()
{
std::fstream f("d:\\file.txt", std::ios::in | std::ios::out);

char c;

while (f >> c)
{
if (c == 'A')
{
f.seekp(-1, std::ios_base::cur);
f.put('Q');
return EXIT_SUCCESS;
}
}

std::cout << "Nothing to do." << std::endl;

return EXIT_SUCCESS;
}

关于C++ 删除或覆盖文件中的现有信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com