使用 ifsream 和字符串流复制二进制文件时出错
Error when copying a binary file with ifsream and stringstream
我试图从包含纯文本标题后跟二进制图像信息的图像文件中剥离标头。作为先兆,我想将文件信息复制到字符串流中进行编辑。执行此操作时,我遇到了一些问题,导致我尝试简单地读取文件并将其作为新文件再次写回以进行调试。当我这样做时,新文件最终比原始文件大约 1kb。在UltraEdit中进行二进制比较时,似乎在十六进制字符0A(我相信换行)出现的地方,我的程序似乎在它之前添加了0D(回车)。我想知道这种行为的原因是什么,如果可能的话如何避免它。代码片段如下:
....
std::string inputFilename = argv[1];
std::ifstream in( argv[1],ios::out | ios::binary);
if ( in )
{
std::stringstream fileStream;
fileStream<<in.rdbuf();
cout<<fileStream.str().length(); //debugging
in.close();
ofstream myfile;
myfile.open("selfoutput");
myfile<<fileStream.str();
myfile.close();
....
感谢您的任何帮助!-大卫
尝试ios:in
std::ifstream in( argv[1],ios::in | ios::binary)
或者,事实上
std::ifstream in( argv[1],ios::binary)
这是等效的:
首先,执行与默认构造函数相同的步骤,然后通过调用
rdbuf()->open(filename, mode | std::ios_base::in)
将流与文件关联。如果 open() 调用返回空指针,则设置 设置状态(故障位)
这是我(未经测试的)简单主义者的看法:
#include <fstream>
int main(int /*argc*/, const char *argv[])
{
std::ifstream in(argv[1], std::ios::binary);
if (in)
{
std::ofstream myfile("selfoutput", std::ios::binary);
if (myfile)
myfile << in.rdbuf();
}
}
为了无端的代码高尔夫和糟糕的风格:
#include <fstream>
using namespace std;
int main(int /*argc*/, const char *argv[]) {
ofstream("selfoutput", ios::binary) << ifstream(argv[1], ios::binary).rdbuf();
}
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 将内部带有矢量的结构保存/读取到二进制文件中
- 编译多个C++文件.调用二进制文件以运行代码
- 如何使用位字段将数据从二进制文件复制到结构中?
- uint8_t同一二进制文件的不同十进制值
- 分段 追加和读取二进制文件时出错
- 使用 ifsream 和字符串流复制二进制文件时出错
- 用c++读取二进制文件时出错
- 从二进制文件c++读取值时出错
- 使用C++在Visual Studio中读取二进制文件时出错
- 在boost.Python中将Python二进制文件转换为C++二进制文件时出错