我正在尝试获取任意文件并将其作为原始二进制文件读取,然后将数据作为单独的文本文件输出。对输入文件没有任何关于格式化或编码的假设。我所做的是(非常)大致:
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相关的每个读/写命令都涉及一次取一个字节而不允许进行位级操作。
答案 0 :(得分:0)
你是对的,流不能以低于一个字节的粒度运行。你现在的解决方案并不是那么糟糕。您可以通过一次读取多个字节来改进它,但是无法从文件流中一次读取一位。