我已经使用下面的代码来读取二进制文件(在我的情况下是.docx文件)并将其存储在unsigned char数组中而不仅仅是char(从这里获取引用Reading and writing binary file)
#include <fstream>
#include <iterator>
#include <vector>
int main()
{
std::ifstream input("C:\\test.docx", std::ios::binary);
std::vector<unsigned char> buffer((std::istreambuf_iterator<unsigned char>(input)),
(std::istreambuf_iterator<unsigned char>()));
}
现在我有两个问题。
我想知道的第一件事是,这是在unsigned char数组中读取.docx文件的正确方法吗?或者有更好的选择吗?
其次,我需要打印在unsigned char数组中读取的文件内容,以验证它是否正确读取了该文件。怎么能实现呢?
答案 0 :(得分:1)
如果您将整个文件放在内存中,这是一种好方法。如果要分批读取文件,则应迭代它。一个用例就是通过网络传输它 - 在那里,你不会需要整个文件在内存中。
关于打印文件,可以打印读取的字节,例如:
#include <fstream>
#include <iterator>
#include <vector>
#include <iostream>
#include <iomanip>
int main()
{
std::ifstream input("C:\\test.docx", std::ios::binary);
std::vector<unsigned char> buffer((std::istreambuf_iterator<unsigned char>(input)),
(std::istreambuf_iterator<unsigned char>()));
std::cout << std::hex;
for (unsigned char b : buffer)
std::cout << "0x" << std::setfill('0') << std::setw(2) << (int)b << " ";
std::cout << std::dec << std::endl;
}
如果您打算打印文件内容以查看一些熟悉的文字,那么这不会直接起作用。 docx文件使用Open XML File Format,首先,它们使它们成为一个zip文件。在zip文件中,您将找到文档中数据的XML表示,这些表示是可读的。