【发布时间】:2019-01-05 19:42:59
【问题描述】:
我想知道是否可以在不创建临时文件的情况下减小文本或二进制文件的大小。这样我们就可以删除文件末尾的数据。
如果是,那么如何。如果不是,那为什么。
【问题讨论】:
-
是的,可以将文件截断到给定大小。
-
LOL 这个问题怎么“不清楚”?
标签: c++ c file-io fstream file-handling
我想知道是否可以在不创建临时文件的情况下减小文本或二进制文件的大小。这样我们就可以删除文件末尾的数据。
如果是,那么如何。如果不是,那为什么。
【问题讨论】:
标签: c++ c file-io fstream file-handling
是的,您可以使用 POSIX 系统上可用的 truncate() 或 ftruncate() 函数来减小文件大小。
对于 Windows,使用 SetFilePointer 将当前位置设置为所需的文件大小,然后调用 SetEndOfFile 实际截断它。
【讨论】:
C++17 的新(标准)文件系统 选项:en.cppreference.com/w/cpp/filesystem/resize_file
您可以使用<filesystem> 中的resize_file() 函数添加到C++17 中的标准库:
#include <filesystem>
namespace fs = std::filesystem;
// ...
fs::resize_file(p, 1024); // resize to 1024 bytes
【讨论】: