是否可以像Python中的path.read_bytes()一样在一行代码中获取C++中的字节?

问题描述 投票:0回答:1

在 Linux shell 中,我可以通过

soc_id
获取我们的
xxd /proc/device-tree/soc_id

在Python中,我可以通过

pathlib.Path('/proc/device-tree/soc_id').read_bytes()

得到它

但是在C++中,正如我目前在C++17中搜索/研究的那样,我无法找到一种方法来一行读取它。

这只是运行时文件系统中的一小段 4 字节数据,将在许多 C++ 应用程序中使用。所以,我不想让用户变得太复杂。一行代码是最好的解决方案。

那么,是否有可能像Python中的path.read_bytes()一样在一行代码中获取C++中的字节? 如果 C++17 中没有,那么 C++23/26 又如何?

谢谢!

c++ filesystems
1个回答
0
投票

没有标准库函数可以满足您的需要,但编写这样的函数很容易。

您可以通过多种方式实现,下面演示之一,并让您的所有用户应用程序使用该功能:

#include <vector>
#include <string>
#include <fstream>

std::vector<char> file_get_bytes(std::string const& filename) {
    std::ifstream infile(filename, std::ios_base::binary);
    if (!infile.is_open()) {
        return {};
    }
    std::vector<char> bytes{ std::istreambuf_iterator<char>{infile},
                             std::istreambuf_iterator<char>{} };
    return bytes;
}

使用示例:

int main() {
    auto bytes = file_get_bytes("/proc/device-tree/soc_id");
}
© www.soinside.com 2019 - 2024. All rights reserved.