令我惊讶的是,我还没有找到关于如何使用 C++ 标准库调整文件大小的合理解决方案。必须从原始文件中读取数据,然后将其写入另一个文件,这似乎是完全愚蠢和浪费的。我只是想要一个调整大小的方法,它将切断超出该大小的数据......有什么可以做到这一点吗?
编辑:如果我必须使用上面解释的方法,我用来读/写的缓冲区应该有多大?我显然不能一次读取整个文件,因为我在这里处理的是相当大的文件。
您可以使用Boost.Filesystem提供的函数,特别是它的resize_file()函数。
请注意,Boost.Filesystem (计划)包含在语言标准的未来迭代中。见这里。如果您不想在项目中使用 Boost,这是个好消息。
此外,正如@BenjaminLindley 所提到的,该<filesytem>
标头已在 Visual Studio 2012 中可用(请参见此处;搜索“文件系统”)。
C++17 has std::filesystem::resize_file()
实际上,没有用于调整文件大小的跨平台方法,因为标准没有描述此功能。但是,正如这里所说,有用于此目的的平台 API:请参阅 Windows 的 _chsize() 函数、POSIX 系统的 truncate() 和 ftruncate() 函数。
即使对于更高级的语言,在不加载完整图像的情况下调整文件大小也是相当复杂的任务,它主要是Image Magick等图像处理 SDK 的一个功能。
如果对调整大小质量或支持的格式没有具体要求,我猜马克的回答将是最简单的方法。否则,您需要包含图形格式库并手动实现一些调整大小算法(或者也使用一些库)。