如何根据偏移量从文件中删除数据?

时间:2017-04-16 04:52:05

标签: c++

我目前正在编写一个文件页面管理器程序,它基本上将页面写入,追加和读取到二进制文件。对于写入功能,我必须删除指定页面的全部内容并编写新内容。我需要删除特定范围内的文件中的数据,例如从第30位到第4096位删除数据。

3 个答案:

答案 0 :(得分:1)

如果位置4096后没有更多数据,那么您可以使用truncate(2)将文件缩小到30个字节。

如果在4096字节后有更多数据,那么您可以先用4096字节后的数据覆盖从第30位开始的数据。然后你可以将文件截断为[original_filesize - (4096-30)] bytes。

答案 1 :(得分:0)

删除文件中数据的唯一方法是将其标记为已删除。使用某个值表示删除了部分。否则,将要保存的部分复制到新文件中。

答案 2 :(得分:0)

std::string

非常简单

按照以下步骤操作:
读取文件并将其解压缩到std :: string

std::ifstream input_file_stream( "file" );
const unsigned size_of_file = input_file_stream.seekg( 0, std::ios_base::end ).tellg();

input_file_stream.seekg( 0, std::ios_base::beg ); // rewind

std::string whole_file( size_of_file, ' ' );        // reserved space for the whole file

input_file_stream.read( &* whole_file.begin(), size_of_file );   

然后删除你想要的内容:

// delete with offset
whole_file.erase( 10,       // size_type index
                 200 );      // size_type count 

并最终写入新文件:

// write it to the new file:
std::ofstream output_file_stream( "new_file" );
output_file_stream.write( &*whole_file.begin(), whole_file.size() );
output_file_stream.close();

input_file_stream.close();