Ofstream写入太多字节
Ofstream writing too many bytes
我想在文件中写入时遇到了一些麻烦。这个程序的主要目的是从一个exe文件中读取所有数据,然后在另一个exe文件中写入数据。问题是当我写新文件时,它写了太多的代码。例如,我读取45568 (n=45568)字节,但在新文件中,我有45800字节,我不明白为什么。
#include <fstream>
#include <iostream>
int main(int argc, char** argv)
{
using namespace std;
ifstream file;
file.open("a.exe", istream::in | ios::binary);
std::streampos fsize = 0;
fsize = file.tellg();
file.seekg(0, std::ios::end);
fsize = file.tellg() - fsize;
file.close();
int n = fsize;
file.open("a.exe", istream::in | ios::binary);
std::cout << n << " " << endl;
int z=0;
char *p = new char[n+1];
for (int i = 0;i < n;i++)
{
char ch;
file.get(ch);
p[i] = ch;
}
file.close();
ofstream g;
g.open("b.bin");
std::cout << n;
g.write(p, n);
return 0;
}
改变这一行:
g.open("b.bin");
是这样的:
g.open("b.bin", istream::out | ios::binary);
在Windows(以及遗留的DOS和许多其他遗留环境)上,以文本模式打开的文件对于行尾char: n
得到特殊处理。当Windows写入文本模式文件时,所有的n
字符都以r
和n
的形式写入文件。类似地,文本模式下的文件读取将rn
序列转换为n
。以二进制模式打开文件会关闭所有这些转换行为。
同时,整个程序可以简化为:
void main(int argc, char** argv)
{
ifstream in;
ofstream out;
in.open("a.exe", istream::in | ios::binary);
out.open("b.bin", istream::out | ios::binary);
while (in.rdstate() == in.goodbit)
{
char c;
if (in.get(c))
{
out.write(&c, 1);
}
}
}
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 错误:字符数组的初始值设定项太多
- 对象实例化调用构造函数的次数太多
- Levenshtein 两个文件的距离花费了太多时间
- 我有三个 getline,但是一旦编译,输入就太多了
- 将使用太多的纹理插值器 - 带旋转的着色器
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 使用Visual Studio在虚幻引擎中创建一个新的类c ++给了我太多的错误
- C++:数组<>初始值设定项太多
- GLib-ERROR:为GWakeup创建管道:打开的文件太多
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 多字节到宽字符无法正常工作
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- ZeroMq:打开的文件太多.在同一对象上连续增长的fd使用数
- 如果使用多字节字符集,为什么TCHAR值会更改
- 读取串行命令花费太多时间
- 为什么 Boost unordered_map 在第一次插入时需要太多时间?
- BRK(0) 花费的时间是否太多?
- CUDA错误:共享数据太多(0x4018字节,最大0x4000):额外的0x18字节从哪里来
- Ofstream写入太多字节