【问题标题】:How do I seek beyond end of existing file?我如何寻找现有文件的结尾?
【发布时间】:2012-10-12 03:53:48
【问题描述】:

我如何在现有文件的末尾寻找?

假设我有 test.bin,它是 1000 字节。

然后我运行以下

std::filebuf fbuf;
fbuf.open("c:\\test.bin", std::ios_base::in | std::ios_base::out | std::ios_base::app | std::ios_base::binary);
fbuf.pubseekoff(10, std::ios_base::end);
fbuf.sputc(1);
fbuf.close();

运行此示例后,我预计新文件大小为 1011 字节。但相反,它在现有文件的末尾添加了 0x01,使其成为 1001 个字节。

有趣的是,当它是新文件时,它会按照我想要的方式工作。

我在 Windows 7 x64 上运行它,但目标平台是 Ubuntu。

【问题讨论】:

    标签: c++ windows linux file-io


    【解决方案1】:

    您设置了std::ios_base::app 标志。这会导致所有写入都发生在文件末尾。如果要在当前位置执行写入,则在打开文件时不能指定此标志。

    ios_base::app 追加文件;即始终写入文件末尾

    【讨论】:

    • 换句话说,不可能在现有文件中快速预分配额外空间?
    • 这很简单。只需写出文件末尾即可。但是,您的代码并没有这样做。它写在文件的末尾
    • Нузю 这就是我想要做的。我希望pubseekoff 将位置移动到文件末尾。我需要在我的代码中进行哪些更改?
    • 你需要写在你想写的位置,而不是文件的末尾。 (你真的看过我的回答吗?)
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多