我可以使用 C++ 中的 open() 函数以二进制模式打开 .xls 或 .PDF 文件并读取其内容吗?如果没有,我如何构建一个可以读取具有此类文件格式(甚至更多)的文件内容的应用程序
3 回答
是的,您可以将文件系统中的任何文件作为二进制文件打开,并且您也可以读取它(只要您的操作系统允许根据文件访问权限打开文件,并且没有其他应用程序对其进行锁定) , ETC)。
接下来您可能会问“我如何解释 PDF 或 XLS 文件?” 正如他们在英国所说的那样,这完全是另外一锅鱼。PDF 和 XLS 文件都不能直接“理解”。我最近查看的一个 PDF 库包含几十个文件,并且是几兆字节的源代码。我在 Python 中处理过 XLS 文件,其中的代码有几千行代码。
简单的阅读将是:
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
std::vector<char> readfile(std::string const& fname)
{
std::ifstream ifs(fname.c_str(), std::ios::binary);
std::istreambuf_iterator<char> f(ifs.rdbuf()), l;
std::vector<char> bytes;
std::copy(f, l, std::back_inserter(bytes));
return bytes;
}
int main()
{
auto bytes = readfile("my.pdf");
}
参数模式指向以下列序列之一开头的字符串(附加字符可能跟随在这些序列之后。):
``r'' 打开文本文件进行阅读。流位于文件的开头。
``r+'' 为读写打开。流位于文件的开头。
``w'' 将文件截断为零长度或创建用于写入的文本文件。流位于文件的开头。
``w+'' 为读写而打开。如果文件不存在,则创建该文件,否则将其截断。流位于文件的开头。
``a'' 开放写。如果文件不存在,则创建该文件。流位于文件的末尾。对文件的后续写入将始终在文件的当前末尾结束,而与任何干预 fseek(3) 或类似内容无关。
``a+'' 为读写打开。如果文件不存在,则创建该文件。流位于文件的末尾。对文件的后续写入将始终在文件的当前末尾结束,而与任何干预 fseek(3) 或类似内容无关。