delete in chunks

This commit is contained in:
2026-03-08 23:08:53 +01:00
parent 53a222a7da
commit 7873020e72
3 changed files with 24 additions and 40 deletions

View File

@@ -143,21 +143,29 @@ void Vault::delete_file(const std::string &filename) {
if (entry_start != -1) {
i64 entry_end = entry_start + static_cast<i64>(entry_total_size);
m_file.clear();
m_file.seekg(entry_end, std::ios::beg);
std::string remaining;
remaining.assign(std::istreambuf_iterator<char>(m_file),
std::istreambuf_iterator<char>());
i64 read_pos = entry_end;
i64 write_pos = entry_start;
std::array<u8, 65536> buffer{};
while (true) {
m_file.clear();
m_file.seekg(read_pos);
m_file.read(to_char_ptr(buffer.data()), buffer.size());
auto bytes = m_file.gcount();
if (bytes == 0) {
break;
}
m_file.clear();
m_file.seekp(entry_start, std::ios::beg);
ASSERT(m_file.write(remaining.data(), static_cast<i64>(remaining.size())));
m_file.seekp(write_pos);
ASSERT(m_file.write(to_char_ptr(buffer.data()), bytes));
read_pos += bytes;
write_pos += bytes;
}
i64 new_size = entry_start + static_cast<i64>(remaining.size());
m_file.flush();
m_file.close();
std::filesystem::resize_file(m_path, new_size);
std::filesystem::resize_file(m_path, write_pos);
m_file.open(m_path, std::ios::in | std::ios::out | std::ios::binary);
ASSERT(m_file.good());