在c++中拆分文件并将其重新组合
Split a File and put it back together in c++
我想通过读取数据块来复制文件,发送它,然后再把它放回一起。发送不是问题的一部分,所以我在代码中省略了它。它应该可以处理任何类型的文件和任意的piece_length。
这只是一个前期阶段。最后,数据块不应该按顺序选择,而是随机选择。在接收到另一个数据块之间可能会有一段时间。
我知道这个例子是有意义的,如果size % piece_length != 0
。
我在另一端得到与原始文件相同大小的崩溃文件。有人发现问题了吗?
int main ()
{
string file = "path/test.txt"
string file2 = "path2/test.txt";
std::ifstream infile (file.c_str() ,std::ifstream::binary);
//get size of file
infile.seekg (0,infile.end);
long size = infile.tellg();
infile.seekg (0);
size_t piece_length = 5;
for (int i = 0; i < ((size / piece_length) + 1); i++)
{
if ( i != (size / piece_length))
{
std::ifstream infile (file.c_str() ,std::ifstream::binary);
infile.seekg((i * piece_length) , infile.beg);
char* buffer = new char[piece_length];
infile.read(buffer, piece_length);
infile.close();
std::ofstream outfile (file2.c_str() ,std::ofstream::binary);
outfile.seekp((i * piece_length), outfile.beg);
outfile.write(buffer, piece_length);
outfile.close();
}
else
{
std::ifstream infile (file.c_str() ,std::ifstream::binary);
infile.seekg((i * piece_length) , infile.beg);
char* buffer = new char[size % piece_length];
infile.read(buffer, size % piece_length);
infile.close();
std::ofstream outfile (file2.c_str() ,std::ofstream::binary);
outfile.seekp((i * piece_length), outfile.beg);
outfile.write(buffer, size % piece_length);
outfile.close();
}
}
return 0;
}
要回答您的具体问题,您需要打开outfile
, ios::in | ios::out
在标志中,否则它默认为只写模式并破坏文件中已经存在的内容。写到现有二进制文件的中间c++
你可以考虑以下几点:
- 如果您只是将部分写入文件的末尾,只需使用
ios::app
(追加)。甚至不需要查找。 - 你不需要一直重新打开
infile
甚至outfile
,只需重复使用它们。 - 您也可以重用
buffer
。请记住delete
,或者最好使用std::vector
。
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 通过组合不同的类型来创建唯一的id
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 模板元编程:如何将参数包组合成新的参数包
- 如何在加密++中将两个源组合成新的源
- 在编译时将整数和分数部分宏组合成一个新的宏或双精度
- C :在新基础中生成组合
- 向 MFC 组合框添加新字符串时触发的断言
- 如何重新组合地图并将元素插入新地图
- r-在C++中的划分与组合(组合数学)实现
- 运算符的使用=与新运算符组合使用
- 函数组合-组合方法优化
- std::ios::openmode的组合,如果文件存在,则截断,但防止创建新文件
- Yaml-cpp(新API) -嵌套映射/序列组合和迭代
- 将两个复杂的属性重新组合成新的对象