我正在尝试找到一种跨平台的方法来从文件末尾删除X
个字节。
目前我找到了:
特定于平台的解决方案(例如posix的truncate):这是我不想要的,因为我希望C ++程序在多个平台上运行。
读入整个文件,再次写出文件减去我要删除的字节:我想尽可能地避免这个,因为我希望程序尽可能高效和快速
有什么想法吗?
如果有“转到文件流末尾”的方法/功能,我可以倒回X字节并关闭文件的其余部分或类似的东西吗?
答案 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功能。