如何截断文件? (跨平台)

时间:2012-03-15 20:03:21

标签: c++ file io truncate

我正在尝试找到一种跨平台的方法来从文件末尾删除X个字节。

目前我找到了:

  • 特定于平台的解决方案(例如posix的truncate):这是我不想要的,因为我希望C ++程序在多个平台上运行。

  • 读入整个文件,再次写出文件减去我要删除的字节:我想尽可能地避免这个,因为我希望程序尽可能高效和快速

有什么想法吗?

如果有“转到文件流末尾”的方法/功能,我可以倒回X字节并关闭文件的其余部分或类似的东西吗?

3 个答案:

答案 0 :(得分:4)

您认为跨平台功能如何运作?只需按照以下方式制作自己的功能:

int truncate(int fd, long size)
{
#ifdef _WIN32 || _WIN64 
    return _chsize(fd, size);
#else
  #ifdef POSIX
    return ftruncate(fd, size);
  #else
    // code for other OSes
  #endif
#endif
}

答案 1 :(得分:1)

标准库中没有这样的东西。它们支持流 - 但流没有结束,文件碰巧有结束 - 在当前时间。

您所能做的就是在函数上编写跨平台包装器。

答案 2 :(得分:0)

Boost.Filesystem库(版本1.44及更高版本)提供了resize_file功能。