C++中的文件打开模式

File opening modes in C++

本文关键字:模式 文件 C++      更新时间:2023-10-16

我可以在C++中以二进制模式使用open((函数打开.xls或.PDF文件并读取其内容吗?如果没有,我如何构建一个应用程序,可以读取具有这种文件格式(可能更多(的文件的内容

是的,您可以将文件系统中的任何文件作为二进制文件打开,也可以读取它(只要您的操作系统允许根据文件访问权限打开文件,并且没有其他应用程序锁定它,等等(。

接下来,你可能会问"我该如何解读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+''开放阅读和写作。如果文件未创建存在流位于文件的末尾。Subse-对文件的quent写入将始终以当时的当前值结束文件末尾,而不考虑任何插入的fseek(3(或类似内容。