3

令我惊讶的是,我还没有找到关于如何使用 C++ 标准库调整文件大小的合理解决方案。必须从原始文件中读取数据,然后将其写入另一个文件,这似乎是完全愚蠢和浪费的。我只是想要一个调整大小的方法,它将切断超出该大小的数据......有什么可以做到这一点吗?

编辑:如果我必须使用上面解释的方法,我用来读/写的缓冲区应该有多大?我显然不能一次读取整个文件,因为我在这里处理的是相当大的文件。

4

4 回答 4

8

您可以使用Boost.Filesystem提供的函数,特别是它的resize_file()函数。

请注意,Boost.Filesystem (计划)包含在语言标准的未来迭代中。见这里。如果您不想在项目中使用 Boost,这是个好消息。

此外,正如@BenjaminLindley 所提到的,该<filesytem>标头已在 Visual Studio 2012 中可用(请参见此处;搜索“文件系统”)。

于 2013-06-19T02:55:33.040 回答
5

C++17 has std::filesystem::resize_file()

于 2019-10-23T03:15:48.577 回答
1

实际上,没有用于调整文件大小的跨平台方法,因为标准没有描述此功能。但是,正如这里所说,有用于此目的的平台 API:请参阅 Windows 的 _chsize() 函数、POSIX 系统的 truncate() 和 ftruncate() 函数。

于 2013-11-06T20:01:00.910 回答
-1

即使对于更高级的语言,在不加载完整图像的情况下调整文件大小也是相当复杂的任务,它主要是Image Magick等图像处理 SDK 的一个功能。

如果对调整大小质量或支持的格式没有具体要求,我猜马克的回答将是最简单的方法。否则,您需要包含图形格式库并手动实现一些调整大小算法(或者也使用一些库)。

于 2013-06-19T03:26:21.993 回答