用O_RDWR打开——如何覆盖?

发布于 2024-12-10 20:27:30 字数 178 浏览 0 评论 0原文

我想读取一个文件并更改其内容并将其写回到文件中。

我使用 open 来读取文件,如下所示:

bfd = open(m_file_name.c_str(), O_RDWR)

但是当我写入时,它有点将其附加到旧文件中。我怎样才能覆盖它?

I want to read a file and change its content and write it back to the file.

I use open to read a file as follows:

bfd = open(m_file_name.c_str(), O_RDWR)

But when I write, it is kinda append it to the old one. How can I overwrite it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甲如呢乙后呢 2024-12-17 20:27:30

您可以使用lseek(2)

bfd = open(m_file_name.c_str(), O_RDWR);
// read your file
lseek(bfd, 0, SEEK_SET);
// do whatever manipulation & write file

如果您的文件现在的大小小于原始文件的大小,则需要将大小截断为新的大小,否则您将保留旧末尾的字节文件在最后。如果文件较大,则文件应在您写入时自动增长。

You can use lseek(2)

bfd = open(m_file_name.c_str(), O_RDWR);
// read your file
lseek(bfd, 0, SEEK_SET);
// do whatever manipulation & write file

If your file is now less in size than the original, you will need to truncate the size to the new size, or you'll leave the bytes from the old end of the file at the end. If it's larger, the file should grow automatically as you write.

街角卖回忆 2024-12-17 20:27:30

如果您想在特定位置写入,则必须使用lseek进行查找。

您不会尝试覆盖整个文件,对吗?只是其中的一小部分吗?如果您试图覆盖整个文件,那么这是一个不好的方法。

You have to seek with lseek if you want to write at a specific position.

You are not trying to overwrite the entire file, right? Just a small part of it? If you are trying to overwrite the entire file then this is a bad way to do it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文