C ++中的Infile句柄(Perl中的ala __DATA__)

时间:2009-02-21 10:14:44

标签: c++ filehandle

C ++是否可以通过文件句柄访问infile数据?例如,Perl中的典型习语是:

while (<DATA>) {
  chomp;
  # do sth with $_
}

__DATA__
Foo
Bar

在C ++中用这种方法做什么?

3 个答案:

答案 0 :(得分:5)

您的意思是将文件包含在程序中吗?

不,C ++不能那样做。与Perl不同。有许多工具将采用二进制或文本文件并将它们打包为C / C ++源代码。它们最终成为一个全局阵列。

我总觉得有用的一件事就是能够将随机内存作为文件句柄打开,这与你看起来要求的类似。在标准C ++中,这可以通过istringstream类来完成,该类具有与ifstream相同的接口。

但是你的问题的背景可能意味着有更好的方法来实现你在C / C ++中的想法。需要更多信息。

答案 1 :(得分:2)

C ++没有惯用的方法。改为使用单独的数据文件。

根据您的平台,您可能希望使用资源来实现类似的结果,但这超出了C ++的范围。特别是,要将资源存储在二进制文件中,您需要使用外部工具,并在代码中读取这些资源,您需要调用平台API。例如,在Windows下,有LoadResource函数(和相关的)。

答案 2 :(得分:1)

我不会说它是惯用的,因为我从未在任何C ++代码中看到它,但您可以使用C ++字符串流和C预处理器字符串粘贴将多行字符串视为输入流:

#include <sstream>
#include <iostream>

using namespace std;

const string data = 
    "once upon a time, " \
    "a young lass called Goldilocks\n" \
    "went for a walk in the forest.\n";

int main ()
{
    istringstream in (data);

    for (string line; getline(in, line); ) 
        cout << line << endl;

    return 0;
}