(C ++)将arbirtrary文件读为二进制文件并将数据作为单独的文本文件输出

时间:2011-08-30 06:21:23

标签: c++

我正在尝试获取任意文件并将其作为原始二进制文件读取,然后将数据作为单独的文本文件输出。对输入文件没有任何关于格式化或编码的假设。我所做的是(非常)大致:

char *pDataBlock = new char[nLength];
 ifstream InputFile("MyInputFile.txt", ios::in | ios::binary);
 ofstream OutputFile("MyOutputFile.txt"); 
 while (InputFile)
 { 
  InputFile.read(pDataBlock, nLength);
  OutputFile.write(pDataBlock, nLength);
 }  

当前问题: 此代码以二进制模式打开MyInputFile.txt,但一次读取一个字符(byte!)到一个名为pDataBlock的C字符串中。然后将此C字符串一次一个字节写入MyOutputFile.txt。

坏的解决方案: 我现在的解决方案是将以下步骤插入上面的代码:(1)读取InputFile的单个字符,(2)将此字符转换为整数,(3)将整数转换为二进制字符串,(3) 4)在追加模式下将此二进制字符串输出到OutputFile,(5)读取下一个字符直到EOF。

问题似乎是我发现与fstream相关的每个读/写命令都涉及一次取一个字节而不允许进行位级操作。

1 个答案:

答案 0 :(得分:0)

你是对的,流不能以低于一个字节的粒度运行。你现在的解决方案并不是那么糟糕。您可以通过一次读取多个字节来改进它,但是无法从文件流中一次读取一位。